type strategy generationtype generation generatedvalue example autoincrement java hibernate db2 hibernate-annotations object-persistence

java - strategy - La anotación Hibernate @Id @GeneratedValue no reconoce el ID de incremento generado por la base de datos DB2



jpa autoincrement id (2)

esto es lo que hicimos:

creamos una secuencia en DB2:

en el archivo de mapeo hibernate:

<id name="idClass" column="IDROW" > <generator class="sequence"> <param name="sequence">SIDFINANCEMENT</param> </generator> </id>

Funciona en un entorno agrupado en el que muchas instancias necesitan obtener una secuencia y la secuencia generada es única.

Insertar un segundo registro utilizando Hibernate 3 en DB2 v9.x donde una columna tiene una Id. De columna de clave primaria única generada por DB2 no funciona con la persistencia de mi entidad Hibernate.

La inserción del primer registro funciona bien, sin embargo, a menos que incremente manualmente y establezca el valor utilizando el colocador, no se podrán conservar más registros. Intenté comentar @GeneratedValue ... ¿estoy usando esto correctamente? No quiero que Hibernate aumente automáticamente la columna Id, quiero que use el ID incrementado generado por DB2 para insertar la siguiente fila. Gracias:)

Este es mi código:

private short APLSEQNUM; @javax.persistence.Column(name = "MRT_APLSEQNUM") @Id @GeneratedValue(strategy = GenerationType.AUTO) public short getAPLSEQNUM() { return APLSEQNUM; }

El contrainst añadido en DB2 crea la secuencia de comandos de tabla para generar el 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 )

Esta es la excepción:

Hibernate:?? Insertar en RPS.TMRT valores (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_APLSEQNUM, MRT_ACMPNUM) (,, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions ADVERTENCIA: Error de SQL: -803, SQLState: 23505 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Error de DB2 SQL: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1; RPS. TMRT 15-Mar-2011 17:37:44 org.hibernate.event.def.AbstractFlushingEventListener performExecutions SEVERE: No se pudo sincronizar el estado de la base de datos con la sesión org.hibernate.exception.ConstraintViolationException: no se pudo insertar: [qa.gov.moi.rps .db.entity.Medical_MRT] en org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:71) en org.hibernate.exception.JDBCExceptionHelper.convert (JDBCExceptionHelp er.java:43) en org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2272) en org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2665) en org.hibernate.action .EntityInsertAction.execute (EntityInsertAction.java:60) en org.hibernate.engine.ActionQueue.execute (ActionQueue.java:279) en org.hibernate.engine.ActionQueue.executeActions (ActionQueue.java:263) en org.hibernate. engine.ActionQueue.executeActions (ActionQueue.java:167) en org.hibernate.event.def.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:298) en org.hibernate.event.def.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:27) en org.hibernate.impl.SessionImpl.flush (SessionImpl.java:1000) en org.hibernate.impl.SessionImpl.managedFlush (SessionImpl.java:338) en org.hibernate.transaction.JDBCTransaction.commit (JDBCTransaction.java:106 ) en org.hibernate.ejb.TransactionImpl.commit (TransactionImpl.java:54) en qa.g ov.moi.rps.db.helper.MedicalHelper.create (MedicalHelper.java:74) en qa.gov.moi.rps.db.helper.MedicalHelper.main (MedicalHelper.java:285) en sun.reflect.NativeMethodAccessorImpl. invoke0 (Método nativo) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) en java.lang.reflect.Method.invoke (Method.java: 597) en com.intellij.rt.execution.application.AppMain.main (AppMain.java:115) Causado por: com.ibm.db2.jcc.c.SqlException: error SQL de SQL: SQLCODE: -803, SQLSTATE: 23505 , SQLERRMC: 1; RPS.TMRT en com.ibm.db2.jcc.c.fg.d (fg.java:1340) en com.ibm.db2.jcc.b.gb.k (gb.java:351) en com.ibm.db2.jcc.b.gb.a (gb.java:60) en com.ibm.db2.jcc.bwa (w.java:52) en com.ibm.db2.jcc.b.wb .c (wb.java:213) en com.ibm.db2.jcc.c.gg.ab (gg.java:1779) en com.ibm.db2.jcc.c.gg.d (gg.java:2324 ) en com.ibm.db2.jcc.c.gg.W (gg.java:457) en com.ibm.db2.jcc.c.gg.executeUpdate (gg.java:440) en org.hibernate.jdbc. NonBatchingBa tcher.addToBatch (NonBatchingBatcher.java:23) en org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2252) ... 18 más javax.persistence.RollbackException: Error al realizar la transacción en org.hibernate. ejb.TransactionImpl.commit (TransactionImpl.java:71) en qa.gov.moi.rps.db.helper.MedicalHelper.create (MedicalHelper.java:74) en qa.gov.moi.rps.db.helper.MedicalHelper. main (MedicalHelper.java:285) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Método nativo) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) en java.lang.reflect.Method.invoke (Method.java:597) en com.intellij.rt.execution.application.AppMain.main (AppMain.java:115) Causado por: org.hibernate.exception.ConstraintViolationException: could no insertar: [qa.gov.moi.rps.db.entity.Medical_MRT] en org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:7) 1) en org.hibernate.exception.JDBCExceptionHelper.convert (JDBCExceptionHelper.java:43) en org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2272) en org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2665) en org.hibernate.action.EntityInsertAction.execute (EntityInsertAction.java:60) en org.hibernate.engine.ActionQueue.execute (ActionQueue.java:279) en org.hibernate.engine.ActionQueue. executeActions (ActionQueue.java:263) en org.hibernate.engine.ActionQueue.executeActions (ActionQueue.java:167) en org.hibernate.event.def.AbstractFlushingEventListener.performExecutions (AbstractFlushingEventListener.java:298) en org.hibernate.event .def.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:27) en org.hibernate.impl.SessionImpl.flush (SessionImpl.java:1000) en org.hibernate.impl.SessionImpl.managedFlush (SessionImpl.java:338) en org. hibernate.transaction.JDBCTransaction.commit (JDBCTransaction.java:106) a t org.hibernate.ejb.TransactionImpl.commit (TransactionImpl.java:54) ... 7 más Causado por: com.ibm.db2.jcc.c.SqlException: error SQL de SQL: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1; RPS.TMRT en com.ibm.db2.jcc.c.fg.d (fg.java:1340) en com.ibm.db2.jcc.b.gb.k (gb.java:351) en com.ibm.db2.jcc.b.gb.a (gb.java:60) en com.ibm.db2.jcc.bwa (w.java:52) en com.ibm.db2.jcc.b.wb. c (wb.java:213) en com.ibm.db2.jcc.c.gg.ab (gg.java:1779) en com.ibm.db2.jcc.c.gg.d (gg.java:2324) en com.ibm.db2.jcc.c.gg.W (gg.java:457) en com.ibm.db2.jcc.c.gg.executeUpdate (gg.java:440) en org.hibernate.jdbc.NonBatchingBatcher .addToBatch (NonBatchingBatcher.java:23) en org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2252) ... 18 más


Use @GeneratedValue(strategy = GenerationType.IDENTITY)