0

我必须重构一个使用 Oracle 数据库和 Hibernate 的 EJB。这基本上是在数据库中添加更多字段,并在 EJB 中重构利用这些字段的方法。

但是我发现这样做后我得到了

ORA-00904: "XRF_SYSID": 无效标识符

XRF_SYSID作为新领域之一)。我很确定这XRF_SYSID不会违反任何 oracle 数据库命名规则。我认为可能是缓存仍在使用旧的数据库结构,但是 Hibernate 配置没有打开缓存。如果我将 EJB 切换回使用旧字段,它仍然可以工作。

这是sql:

insert into XRF_CROSS_REFERENCE 
(XRF_COMPANY, XRF_CREATED, XRF_DISCARD_NUMBER, XRF_EDITOR, XRF_KEY, XRF_LAST_EDITED, XRF_MANCOID, XRF_STATUS, XRF_SYSID, XRF_VALUE, XRF_ID) 
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

错误日志:

12:29:08,584 错误 [org.hibernate.event.def.AbstractFlushingEventListener] 无法将数据库状态与会话同步
org.hibernate.exception.SQLGrammarException:无法执行 JDBC 批量更新
    在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
    在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
    在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
    在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
    在 org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    在 org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
    在 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
    在 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
    在 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
    在 uk.co.ifdsgroup.xref.util.HibernateUtil.save(HibernateUtil.java:104)
    在 uk.co.ifdsgroup.xref.domain.CrossReferenceTest.testPersistance(CrossReferenceTest.java:59)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    在 java.lang.reflect.Method.invoke(Method.java:597)
    在 org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    在 org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    在 org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    在 org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    在 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    在 org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    在 org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    在 org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    在 org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    在 org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    在 org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    在 org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    在 org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
    在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120)
    在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103)
    在 org.apache.maven.surefire.Surefire.run(Surefire.java:169)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    在 java.lang.reflect.Method.invoke(Method.java:597)
    在 org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
    在 org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
引起:java.sql.BatchUpdateException:ORA-00904:“XRF_SYSID”:标识符无效

    在 oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:629)
    在 oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9409)
    在 oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:211)
    在 org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    ... 35 更多
12:29:08,586 WARN [uk.co.ifdsgroup.xref.util.HibernateUtil] 保存对象时出现问题
org.hibernate.exception.SQLGrammarException:无法执行 JDBC 批量更新
    在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
    在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
    在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
    在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
    在 org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    在 org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
    在 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
    在 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
    在 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
    在 uk.co.ifdsgroup.xref.util.HibernateUtil.save(HibernateUtil.java:104)
    在 uk.co.ifdsgroup.xref.domain.CrossReferenceTest.testPersistance(CrossReferenceTest.java:59)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    在 java.lang.reflect.Method.invoke(Method.java:597)
    在 org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    在 org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    在 org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    在 org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    在 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    在 org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    在 org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    在 org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    在 org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    在 org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    在 org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    在 org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    在 org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
    在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120)
    在 org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103)
    在 org.apache.maven.surefire.Surefire.run(Surefire.java:169)
    在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    在 java.lang.reflect.Method.invoke(Method.java:597)
    在 org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
    在 org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
引起:java.sql.BatchUpdateException:ORA-00904:“XRF_SYSID”:标识符无效

    在 oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:629)
    在 oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9409)
    在 oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:211)
    在 org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    ... 35 更多
4

0 回答 0