Hibernate 3 を使用して DB2 v9.x に 2 番目のレコードを挿入すると、DB2 によって生成された一意の主キー列 ID を持つ列が、Hibernate エンティティの永続化では機能しません。
最初のレコードの挿入は正常に機能しますが、セッターを使用して手動で値をインクリメントして設定しない限り、それ以上のレコードを永続化することはできません。@GeneratedValue をコメントアウトしようとしました....これを正しく使用していますか? Hibernate に Id 列を自動インクリメントさせたくありません。DB2 自体によって生成されたインクリメントされた ID を使用して、次の行を挿入したいと考えています。ありがとう:)
これは私のコードです:
private short APLSEQNUM;
@javax.persistence.Column(name = "MRT_APLSEQNUM")
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public short getAPLSEQNUM() {
return APLSEQNUM;
}
Id を生成するために DB2 create table スクリプトに追加された制約:
"MRT_APLSEQNUM" SMALLINT NOT NULL GENERATED BY DEFAULT AS IDENTITY ( START WITH +1
INCREMENT BY +1
MINVALUE +1
MAXVALUE +32767
NO CYCLE
CACHE 20
NO ORDER )
これは例外です:
Hibernate: RPS.TMRT に挿入 (MRT_APRNUM、MRT_CHKLOC、MRT_DPTCDE、MRT_FUNCDE、MRT_MDCNUM、MRT_MDCRSLCDE、MRT_MDCRSLDTE、MRT_OCCCDE、MRT_QIDNO、MRT_REGDTE、MRT_REMARK、MRT_SECCDE、MRT_SMP、MRT_USRID、MRT_VISNUM、MRT_APLYER ?、MRT_APLYER NUM、MRT_APLYER ? ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions警告: SQL エラー: -803、SQLState: 23505 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: DB2 SQL エラー: SQLCODE: -803、SQLSTATE: 23505、SQLERRMC: 1;RPS。 TMRT 15-Mar-2011 17:37:44 org.hibernate.event.def.AbstractFlushingEventListener performExecutions SEVERE: データベースの状態をセッション org.hibernate.exception.ConstraintViolationException と同期できませんでした: 挿入できませんでした: [qa.gov.moi.rps .db.エンティティ。Medical_MRT] org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) で org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) で org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister) .java:2272) org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665) で org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) で org.hibernate.engine.ActionQueue。 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) で実行 (ActionQueue.java:279) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) で org.hibernate.event.def org.hibernate の .AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)。event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) org .hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) の org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) の qa.gov.moi.rps.db.helper.MedicalHelper.create(MedicalHelper) .java:74) で qa.gov.moi.rps.db.helper.MedicalHelper.main(MedicalHelper.java:285) で 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) で com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) 原因: com.ibm.db2.jcc.c.SqlException: DB2 SQL エラー: SQLCODE: -803、SQLSTATE: 23505、SQLERRMC: 1; com.ibm.db2.jcc.c.fg.d(fg.java:1340) の RPS.TMRT (com.ibm.db2.jcc.b.gb.k(gb.java:351) の com.ibm)。 com.ibm.db2.jcc.bwa(w.java:52) の db2.jcc.b.gb.a(gb.java:60) com.ibm.db2.jcc.b.wb.c(wb. java:213) com.ibm.db2.jcc.c.gg.ab(gg.java:1779) com.ibm.db2.jcc.c.gg.d(gg.java:2324) com.ibm .db2.jcc.c.gg.W(gg.java:457) の com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440) の org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher) .java:23) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) ... 18 さらに javax.persistence.RollbackException:qa.gov の qa.gov.moi.rps.db.helper.MedicalHelper.create(MedicalHelper.java:74) の org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71) でトランザクションをコミット中にエラーが発生しました。 moi.rps.db.helper.MedicalHelper.main(MedicalHelper.java:285) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) の sun.reflect. DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) : org.hibernate.exception.ConstraintViolationException: 挿入できませんでした: [qa.gov.moi.rps.db.entity.Medical_MRT] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2272) で org.hibernate.persister.entity.AbstractEntityPersister で org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) で.insert(AbstractEntityPersister.java:2665) org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) org.hibernate.engine. ActionQueue.executeActions(ActionQueue.java:263) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) org.hibernate .event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) で org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) で org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java) :106) at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) ... さらに 7 原因: com.ibm.db2.jcc.c.SqlException: DB2 SQL エラー: SQLCODE: -803、SQLSTATE : 23505、SQLERRMC: 1; com.ibm.db2.jcc.c.fg.d(fg.java:1340) の RPS.TMRT com.ibm.db2.jcc.b.gb.k(gb.java: 351) com.ibm.db2.jcc.b.gb.a(gb.java:60) com.ibm.db2.jcc.bwa(w.java:52) com.ibm.db2.jcc.b .wb.c(wb.java:213) at com.ibm.db2.jcc.c.gg.ab(gg.java:1779) at com.ibm.db2.jcc.c.gg.d(gg.java) :2324) com.ibm.db2.jcc.c.gg.W(gg.java:457) com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440) org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23) で org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) ... 18 もっと見る