Hi Kristian, For me this does not look like a OJB bug, but as a configuration problem. If you have a java attribute of type String but have defined it as INTEGER in the repository.xml you've got a problem!
If you want to have a String attribute converted into an Oracle Number column you should use a FieldConversion but not change the PlatformOracleImpl. cheers, thomas > -----Original Message----- > From: kristian meier [mailto:[EMAIL PROTECTED] > Sent: Thursday, June 05, 2003 9:46 AM > To: OJB Users List > Subject: Re: Possible OJB Bug with Oracle > > > Hello, > > when I yesterday switch to oracle I came across the same > exception and I > investigated a bit, and > found an unexpected situation in the PlatformOracleImpl.java > > in the setObjectForStatement( .... ) method the sqlType was > Type.INTEGER > and the value was a String class > both arguments were passed to the PlatformDefaultImpl.java where they > were passed into the PreparedStatement. > > the String class seemed to be already wrong at this place, > but a simple > hack does work fine for me: > > *** PlatformOracleImpl.java Sun May 4 14:08:14 2003 > --- > src/java/org/apache/ojb/broker/platforms/PlatformOracleImpl.java > Thu Jun 5 09:17:58 2003 > *************** > *** 126,131 **** > --- 126,138 ---- > ps.setLong(index, ((Integer) value).intValue()); > } > + else if (sqlType == Types.INTEGER && value > instanceof String) > + { > + // workaround: > + ps.setInt(index, Integer.parseInt( (String) value ) ); > + } > else > { > + this.logger.debug( "using type " + sqlType + " for > class " + > value.getClass().getName() > + + "(" + value + ")" ); > super.setObjectForStatement(ps, index, value, sqlType); > } > > maybe this also helps to find the real bug !!! > > with best wishes Kristian > > > > Brown, Melonie S. - Contractor wrote: > > >Has anybody else ran into this? This is a big problem for > us, and I'm > >catching a lot of flack since I recommended we use OJB. > > > >It appears that OJB is generating a getCollection query even > though the code > >specifies a single object. > > > >I'm not sure where to begin debugging, so any assistance > would be greatly > >appreciated. > > > >-------- Original Message -------- > >Subject: [RC3] Works with MySql, Fails with > ClassCastException with Oracle > >Date: Thu, 29 May 2003 11:41:00 -0400 > >From: Brown, Melonie S. - Contractor <[EMAIL PROTECTED]> > >Reply-To: OJB Users List <[EMAIL PROTECTED]> > >Newsgroups: gmane.comp.jakarta.ojb.user > > > >I have code that works perfectly fine in MySQL but crashes > and dies against > >an Oracle database. I'm getting a java.lang.ClassCastException at > >GetCollectionByQuery which doesn't make sense since I'm calling > >broker.getObjectbyQuery. Also, no SQL statements show in > the spy.log file. > >Suggestions would be greatly appreciated. > > > >This is the code: > >public static RcioDB retrieveRcio(RcioDB sRcio) throws > DataStoreException > > { > > PersistenceBroker broker = GetAccess.getPersistenceBroker(); > > > > try > > { > > broker.beginTransaction(); > > > > Criteria crit = new Criteria(); > > > > crit.addEqualTo( > > Constants.RCIO_ID, > > String.valueOf(sRcio.getRcio_ID())); > > > > System.out.println("criteria set"); > > QueryByCriteria query = > QueryFactory.newQuery(RcioDB.class, > >crit); > > System.out.println("query created"); > > > > Object theRcioToBeFetched = > broker.getObjectByQuery(query); > > System.out.println("after fetch"); > > System.out.println(theRcioToBeFetched.getClass()); > > return (RcioDB)theRcioToBeFetched; > > } > > catch (Throwable t) > > { > > t.printStackTrace(); > > throw new DataStoreException(t.toString()); > > } > > finally > > { > > broker.close(); > > } > > > >This is the output from the log: > > > >criteria set > >query created > >[org.apache.ojb.broker.accesslayer.ConnectionManagerImpl] > INFO: Rollback was > >called, do rollback on current connection > >[EMAIL PROTECTED] > >org.apache.ojb.broker.PersistenceBrokerException: > >java.lang.ClassCastException > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio > nByQuery(Persis > >tenceBrokerImpl.java:1467) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio > nByQuery(Persis > >tenceBrokerImpl.java:1496) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio > nByQuery(Persis > >tenceBrokerImpl.java:1485) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQ > uery(Persistenc > >eBrokerImpl.java:1747) > > at > >org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObj > ectByQuery(Dele > >gatingPersistenceBroker.java:271) > > at > >mil.army.forscom.tsamsweb.rcio.database.RcioCRUD.retrieveRcio > (RcioCRUD.java: > >131) > > at > >mil.army.forscom.tsamsweb.rcio.tests.InsertRciosTest.testInse > rtRcios(InsertR > >ciosTest.java:59) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > >sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces > sorImpl.java:39 > >) > > at > >sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet > hodAccessorImpl > >.java:25) > > at java.lang.reflect.Method.invoke(Method.java:324) > > at junit.framework.TestCase.runTest(TestCase.java:154) > > at junit.framework.TestCase.runBare(TestCase.java:127) > > at junit.framework.TestResult$1.protect(TestResult.java:106) > > at junit.framework.TestResult.runProtected(TestResult.java:124) > > at junit.framework.TestResult.run(TestResult.java:109) > > at junit.framework.TestCase.run(TestCase.java:118) > > at junit.framework.TestSuite.runTest(TestSuite.java:208) > > at junit.framework.TestSuite.run(TestSuite.java:203) > > at > >org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTes > ts(RemoteTestRu > >nner.java:392) > > at > >org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(Re > moteTestRunner. > >java:276) > > at > >org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(R > emoteTestRunner > >.java:167) > >Caused by: java.lang.ClassCastException > > at > >oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePr > eparedStatement > >.java:2804) > > at > >oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePr > eparedStatement > >.java:2905) > > at > >com.p6spy.engine.spy.P6PreparedStatement.setObject(P6Prepared > Statement.java: > >282) > > at > >org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObject > ForStatement(Pl > >atformDefaultImpl.java:230) > > at > >org.apache.ojb.broker.platforms.PlatformOracleImpl.setObjectF > orStatement(Pla > >tformOracleImpl.java:130) > > at > >org.apache.ojb.broker.accesslayer.StatementManager.bindStatem > entValue(Statem > >entManager.java:262) > > at > >org.apache.ojb.broker.accesslayer.StatementManager.bindStatem > ent(StatementMa > >nager.java:296) > > at > >org.apache.ojb.broker.accesslayer.StatementManager.bindSelect > ionCriteria(Sta > >tementManager.java:474) > > at > >org.apache.ojb.broker.accesslayer.StatementManager.bindStatem > ent(StatementMa > >nager.java:438) > > at > >org.apache.ojb.broker.accesslayer.StatementManager.bindStatem > ent(StatementMa > >nager.java:410) > > at > >org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery > (JdbcAccessImpl > >.java:258) > > at > >org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterato > r.java:199) > > at > >org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIter > ator(RsIterator > >FactoryImpl.java:95) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIterato > rFromQuery(Pers > >istenceBrokerImpl.java:2311) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorF > romQuery(Persis > >tenceBrokerImpl.java:1657) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio > nByQuery(Persis > >tenceBrokerImpl.java:1305) > > at > >org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectio > nByQuery(Persis > >tenceBrokerImpl.java:1460) > > > >My repository.xml: > ><jdbc-connection-descriptor > > platform="Oracle" > > jdbc-level="2.0" > > driver="com.p6spy.engine.spy.P6SpyDriver" > > protocol="jdbc" > > subprotocol="Oracle" > > dbalias="thin:@machinestuff" > > username="user" > > password="password" > > jcd-alias="default" > > default-connection="true" > > batch-mode="false" > > useAutoCommit="1" > > ignoreAutoCommitExceptions="false" > > > > > > > <sequence-manager > > > >className="org.apache.ojb.broker.util.sequence.SequenceManage > rNextValImpl"> > > </sequence-manager> > > > > </jdbc-connection-descriptor> > > > >The repository_user file: > ><class-descriptor class="foo.RcioDB" table="rcio" > > > <field-descriptor > > name="Rcio_ID" > > column="RCIO_ID" > > jdbc-type="INTEGER" > > primarykey="TRUE" > > autoincrement="false" > > indexed="true" > > /> > > <field-descriptor > > name="Rcio_Short_Name" > > column="RCIO_SHORT_NAME" > > jdbc-type="VARCHAR" > > primarykey="false" > > autoincrement="false" > > /> > > <field-descriptor > > name="Rcio_Desc" > > column="RCIO_DESC" > > jdbc-type="VARCHAR" > > primarykey="false" > > autoincrement="false" > > /> > > </class-descriptor> > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]