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)