My TopLink based application works fine with the Oracle JDBC drivers that shipped with JDeveloper 9.0.2. However it fails INSERTS with the drivers that came with JDev 9.0.3. With TopLink session logging on I see that the TopLink generated SQL INSERTs are the same for the 902 drivers and the 903 drivers. The difference is that with the 903 drivers I get an ORA-00904 'invalid column name' exception.
Environment: TopLink 903, Windows 2000, JDK 1.3.1_02, JRE: OJVM (from jdev 903)
Here's an example:
LOCAL EXCEPTION STACK:
EXCEPTION [TOPLINK-4002] (TopLink - 9.0.3 (Build 423)): oracle.toplink.exceptions.DatabaseException
EXCEPTION DESCRIPTION: java.sql.SQLException: ORA-00904: invalid column name
INTERNAL EXCEPTION: java.sql.SQLException: ORA-00904: invalid column name
ERROR CODE: 904
void oracle.toplink.exceptions.TopLinkException.<init>(java.lang.String, java.lang.Exception)
void oracle.toplink.exceptions.DatabaseException.<init>(java.sql.SQLException)
oracle.toplink.exceptions.DatabaseException oracle.toplink.exceptions.DatabaseException.sqlException(java.sql.SQLException, oracle.toplink.internal.databaseaccess.Accessor)
java.lang.Integer oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(java.sql.PreparedStatement, oracle.toplink.publicinterface.Session)
java.lang.Integer oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeNoSelect(oracle.toplink.internal.databaseaccess.DatabaseCall, java.sql.PreparedStatement, oracle.toplink.publicinterface.Session)
java.lang.Object oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(oracle.toplink.queryframework.Call, oracle.toplink.publicinterface.DatabaseRow, oracle.toplink.publicinterface.Session)
java.lang.Object oracle.toplink.publicinterface.UnitOfWork.executeCall(oracle.toplink.queryframework.Call, oracle.toplink.publicinterface.DatabaseRow, oracle.toplink.queryframework.DatabaseQuery)
java.lang.Object oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall(oracle.toplink.internal.databaseaccess.DatabaseCall)
java.lang.Object oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall()
void oracle.toplink.internal.queryframework.CallQueryMechanism.insertObject()
void oracle.toplink.internal.queryframework.StatementQueryMechanism.insertObject()
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite()
void oracle.toplink.queryframework.InsertObjectQuery.executeCommit()
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(oracle.toplink.queryframework.WriteObjectQuery)
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert()
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite()
void oracle.toplink.queryframework.WriteObjectQuery.executeCommit()
java.lang.Object oracle.toplink.internal.queryframework.DatabaseQueryMechanism.executeWrite()
java.lang.Object oracle.toplink.queryframework.WriteObjectQuery.execute()
java.lang.Object oracle.toplink.queryframework.DatabaseQuery.execute(oracle.toplink.publicinterface.Session, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.Session.internalExecuteQuery(oracle.toplink.queryframework.DatabaseQuery, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.UnitOfWork.internalExecuteQuery(oracle.toplink.queryframework.DatabaseQuery, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.Session.executeQuery(oracle.toplink.queryframework.DatabaseQuery, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.Session.executeQuery(oracle.toplink.queryframework.DatabaseQuery)
void oracle.toplink.internal.sessions.CommitManager.commitAllObjects(oracle.toplink.internal.helper.IdentityHashtable)
void oracle.toplink.publicinterface.Session.writeAllObjects(oracle.toplink.internal.helper.IdentityHashtable)
void oracle.toplink.publicinterface.UnitOfWork.commitToDatabase()
void oracle.toplink.publicinterface.UnitOfWork.commitRootUnitOfWork()
void oracle.toplink.publicinterface.UnitOfWork.commit()
void com.metalsa.orator.fprs.db.RepositoryTransactionTLImpl.commit()
RepositoryTransactionTLImpl.java:45
void com.metalsa.orator.fprs.db.RepositoryManagedTransactionPolicy.endOperation()
AbstractRepository.java:114
void com.metalsa.orator.fprs.db.AbstractRepository.endOperation()
AbstractRepository.java:63
java.util.List com.metalsa.orator.fprs.db.errors.ErrorReposTLImpl.getErrors(java.lang.String, java.lang.String)
ErrorReposTLImpl.java:117
void com.metalsa.orator.fprs.db.errors.ErrorReposTLImpl.deleteErrors(java.lang.String, java.lang.String)
ErrorReposTLImpl.java:221
void com.metalsa.orator.fprs.db.errors.ErrorReposTest.testInsertErrors()
ErrorReposTest.java:171
native code
TestCase.java:166
TestCase.java:139
TestResult.java:106
TestResult.java:123
TestResult.java:109
TestCase.java:131
TestSuite.java:173
TestSuite.java:168
TestSuite.java:173
TestSuite.java:168
TestRunner.java:644
INTERNAL EXCEPTION STACK:
java.sql.SQLException: ORA-00904: invalid column name
void oracle.jdbc.dbaccess.DBError.throwSqlException(java.lang.String, java.lang.String, int)
DBError.java:187
void oracle.jdbc.ttc7.TTIoer.processError()
TTIoer.java:241
void oracle.jdbc.ttc7.Oall7.receive()
Oall7.java:543
void oracle.jdbc.ttc7.TTC7Protocol.doOall7(byte, byte, int, byte[], oracle.jdbc.dbaccess.DBType[], oracle.jdbc.dbaccess.DBData[], int, oracle.jdbc.dbaccess.DBType[], oracle.jdbc.dbaccess.DBData[], int)
TTC7Protocol.java:1477
int oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(oracle.jdbc.dbaccess.DBStatement, byte, byte[], oracle.jdbc.dbaccess.DBDataSet, int, oracle.jdbc.dbaccess.DBDataSet, int)
TTC7Protocol.java:888
void oracle.jdbc.driver.OracleStatement.executeNonQuery(boolean)
OracleStatement.java:2004
void oracle.jdbc.driver.OracleStatement.doExecuteOther(boolean)
OracleStatement.java:1924
void oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout()
OracleStatement.java:2562
int oracle.jdbc.driver.OraclePreparedStatement.executeUpdate()
OraclePreparedStatement.java:452
java.lang.Integer oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(java.sql.PreparedStatement, oracle.toplink.publicinterface.Session)
java.lang.Integer oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeNoSelect(oracle.toplink.internal.databaseaccess.DatabaseCall, java.sql.PreparedStatement, oracle.toplink.publicinterface.Session)
java.lang.Object oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(oracle.toplink.queryframework.Call, oracle.toplink.publicinterface.DatabaseRow, oracle.toplink.publicinterface.Session)
java.lang.Object oracle.toplink.publicinterface.UnitOfWork.executeCall(oracle.toplink.queryframework.Call, oracle.toplink.publicinterface.DatabaseRow, oracle.toplink.queryframework.DatabaseQuery)
java.lang.Object oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall(oracle.toplink.internal.databaseaccess.DatabaseCall)
java.lang.Object oracle.toplink.internal.queryframework.CallQueryMechanism.executeCall()
void oracle.toplink.internal.queryframework.CallQueryMechanism.insertObject()
void oracle.toplink.internal.queryframework.StatementQueryMechanism.insertObject()
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite()
void oracle.toplink.queryframework.InsertObjectQuery.executeCommit()
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(oracle.toplink.queryframework.WriteObjectQuery)
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert()
void oracle.toplink.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite()
void oracle.toplink.queryframework.WriteObjectQuery.executeCommit()
java.lang.Object oracle.toplink.internal.queryframework.DatabaseQueryMechanism.executeWrite()
java.lang.Object oracle.toplink.queryframework.WriteObjectQuery.execute()
java.lang.Object oracle.toplink.queryframework.DatabaseQuery.execute(oracle.toplink.publicinterface.Session, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.Session.internalExecuteQuery(oracle.toplink.queryframework.DatabaseQuery, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.UnitOfWork.internalExecuteQuery(oracle.toplink.queryframework.DatabaseQuery, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.Session.executeQuery(oracle.toplink.queryframework.DatabaseQuery, oracle.toplink.publicinterface.DatabaseRow)
java.lang.Object oracle.toplink.publicinterface.Session.executeQuery(oracle.toplink.queryframework.DatabaseQuery)
void oracle.toplink.internal.sessions.CommitManager.commitAllObjects(oracle.toplink.internal.helper.IdentityHashtable)
void oracle.toplink.publicinterface.Session.writeAllObjects(oracle.toplink.internal.helper.IdentityHashtable)
void oracle.toplink.publicinterface.UnitOfWork.commitToDatabase()
void oracle.toplink.publicinterface.UnitOfWork.commitRootUnitOfWork()
void oracle.toplink.publicinterface.UnitOfWork.commit()
void com.metalsa.orator.fprs.db.RepositoryTransactionTLImpl.commit()
RepositoryTransactionTLImpl.java:45
void com.metalsa.orator.fprs.db.RepositoryManagedTransactionPolicy.endOperation()
AbstractRepository.java:114
void com.metalsa.orator.fprs.db.AbstractRepository.endOperation()
AbstractRepository.java:63
java.util.List com.metalsa.orator.fprs.db.errors.ErrorReposTLImpl.getErrors(java.lang.String, java.lang.String)
ErrorReposTLImpl.java:117
void com.metalsa.orator.fprs.db.errors.ErrorReposTLImpl.deleteErrors(java.lang.String, java.lang.String)
ErrorReposTLImpl.java:221
void com.metalsa.orator.fprs.db.errors.ErrorReposTest.testInsertErrors()
ErrorReposTest.java:171
native code
TestCase.java:166
TestCase.java:139
TestResult.java:106
TestResult.java:123
TestResult.java:109
TestCase.java:131
TestSuite.java:173
TestSuite.java:168
TestSuite.java:173
TestSuite.java:168
TestRunner.java:644