0

Oracle データベースと Hibernate を使用する EJB をリファクタリングする必要があります。基本的には、データベースにさらにいくつかのフィールドを追加し、それらのフィールドを利用する EJB のメソッドをリファクタリングするケースです。

しかし、これを行った後、私は得ていることがわかりました

ORA-00904: "XRF_SYSID": 識別子が無効です

XRF_SYSID新しいフィールドの1つです)。XRF_SYSIDOracleデータベースの命名規則に違反していないと確信しています。キャッシュがまだ古いデータベース構造を使用している可能性があると思いましたが、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(ネイティブメソッド)
    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(ネイティブメソッド)
    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(ネイティブメソッド)
    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(ネイティブメソッド)
    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