You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by "Schwarzkopf, Alexander" <Al...@stratos-gruppe.de> on 2004/06/15 09:08:00 UTC

ojb with oracle have some bugs

hallo zusammen.
ich habe grosse interesse an OJB und versuchte einige einfache Tests fuer datenbanken
mysql, mssql, sybase, informix und oracle durchzufuehren. Es schein in Grundfunktionalitaeten von PersistanceBroker-Implementation gibt (es ist auch verstaendlich) noch Fehler.
Ich haenge Ausschnitte aus Programm. das Problem ist folgendes.
wenn ich in crit.addEqualTo("id", Integer.toString( key )  )
die Klassenvariable benutze, schlaegt die methode getObjectByQuery( query ) fehl.
Wenn ich aber in crit.addEqualTo("nummer", Integer.toString( key )  ) den Spaltennamen benutze funktioniert es. Benutzen von Spaltennamen  hier ist aber nicht der Sinn der Sache und uebrigens sollte ich dann immer Spaltennamen und Klassenvariablen gleich nennen.
--------------------------------------------------------------------------------
I have a big interest for OJB and try to make some simply tests with db mysql, mssql, sybase, informix and oracle.
it seems that PersistanceBroker implementation has some basic error. I attached one of unfortunal test with part of class, retrieve-method and repository_user-file to explain, what is wrong for Oracle-DB(9i).
If in crit.addEqualTo("id", Integer.toString( key )  )  the class member id was used, it caused an errror at
oracle.jdbc.driver.OraclePreparedStatement.setObject
but if I used in crit.addEqualTo("nummer", Integer.toString( key )  )  the column name, it works. 
I mean it isn't sense of order  that class member name is equal to column name in the table of database

with greeting from D
alex schwarzkopf

Alexander.Schwarzkopf@stratos-gruppe.de

-------------------------------------------------------------
/*        MyClass declaration       */

public class MyClass
  {
  private int id;
  private String name;
  public int getId(){ return id; };
  public String  getName(){ return name; };
  public void setId( int val ){ id = val; };
  public void setName( String val ){ name = val; };
  }

<!-- repository_user.xml  -->

<class-descriptor
  class="bo.MyClass"
  table="KOSTELLE"
> 
  <field-descriptor  
     name="id"
     column="NUMMER"
     jdbc-type="INTEGER"
     primarykey="true" 
  />
  <field-descriptor  
     name="name"
     column="KURZTEXT"
     jdbc-type="VARCHAR"
  />
</class-descriptor>
<!-- -------------------------------- -->
/*        function im main Class       */

public MyClass retrieveData(int key )
  {
  Criteria crit = new Criteria();
  /*crit.addEqualTo("nummer", Integer.toString( key )  );*/
  crit.addEqualTo("id", Integer.toString( key )  );
  QueryByCriteria query = new QueryByCriteria( MyClass.class, crit );
  System.out.println("retrieve or not retrieve?" );
  return(MyClass)broker.getObjectByQuery( query );
  }

/*        error       */
retrieve or not retrieve?
java.lang.ClassCastException
	at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:2018)
	at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:2099)
	at com.p6spy.engine.spy.P6PreparedStatement.setObject(P6PreparedStatement.java:294)
	at org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObjectForStatement(PlatformDefaultImpl.java:227)
	at org.apache.ojb.broker.platforms.PlatformOracleImpl.setObjectForStatement(PlatformOracleImpl.java:137)
	at org.apache.ojb.broker.accesslayer.StatementManager.bindStatementValue(StatementManager.java:216)
	at org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:248)
	at org.apache.ojb.broker.accesslayer.StatementManager.bindSelectionCriteria(StatementManager.java:424)
	at org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:388)
	at org.apache.ojb.broker.accesslayer.StatementManager.bindStatement(StatementManager.java:361)
	at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:278)
	at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:74)
	at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:183)
	at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java:58)
	at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:1780)
	at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java:1321)
	at org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQuery(PersistenceBrokerImpl.java:1432)
	at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(DelegatingPersistenceBroker.java:300)
	at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(DelegatingPersistenceBroker.java:300)
	at TestOra1.retrieveData(TestOra1.java:27)
	at TestOra1.main(TestOra1.java:39)
Exception in thread "main" 


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org