使用 Hibernate 3 将第二条记录插入到 DB2 v9.x 中,其中一列具有由 DB2 生成的唯一主键列 Id 不适用于持久化我的 Hibernate 实体。
插入第一条记录可以正常工作,但是除非我手动递增并使用 setter 设置值,否则无法保留更多记录。我试过注释掉@GeneratedValue ....我使用正确吗?我不希望 Hibernate 自动递增 Id 列,我希望它使用 DB2 自身生成的递增 ID 来插入下一行。谢谢:)
这是我的代码:
private short APLSEQNUM;
@javax.persistence.Column(name = "MRT_APLSEQNUM")
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public short getAPLSEQNUM() {
return APLSEQNUM;
}
在 DB2 create table 脚本中添加的约束以生成 Id:
"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 )
这是一个例外:
休眠:插入到 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 值) ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions警告:SQL 错误:-803,SQLState:23505 2011 年 3 月 15 日 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions 严重:DB2 SQL 错误:SQLCODE:-803,SQLSTATE:23505,SQLERRMC:1;RPS。 TMRT 2011 年 3 月 15 日 17:37:44 org.hibernate.event.def.AbstractFlushingEventListener performExecutions 严重:无法将数据库状态与会话 org.hibernate.exception.ConstraintViolationException 同步:无法插入:[qa.gov.moi.rps .db.实体。Medical_MRT] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister .java:2272) 在 org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) 在 org.hibernate.engine.ActionQueue 的 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)。在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) 在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) 在 org.hibernate.event.def 执行(ActionQueue.java:279) .AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 在 org.hibernate。event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at 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(Native Method) 在 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; RPS.TMRT 在 com.ibm.db2.jcc.c.fg.d(fg.java:1340) 在 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) 在 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) 在 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(Native Method) 在 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.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.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;RPS.TMRT 在 com.ibm.db2.jcc.c.fg.d(fg.java:1340) 在 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) 在 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.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) 的 org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23) ... 还有 18 个