Аннотация Hibernate @Id @GeneratedValue не распознает идентификатор приращения, сгенерированный базой данных DB2

Вставка второй записи с использованием Hibernate 3 в DB2 v9.x, где столбец имеет уникальный идентификатор столбца с первичным ключом, сгенерированный DB2, не работает с сохранением моего объекта Hibernate.

Вставка первой записи работает нормально, однако, если я не увеличиваю вручную и не устанавливаю значение с помощью установщика, никакие другие записи не могут быть сохранены. Я пробовал закомментировать @GeneratedValue .... правильно ли я это использую? Я не хочу, чтобы Hibernate автоматически увеличивал столбец Id, я хочу, чтобы он использовал увеличенный идентификатор, сгенерированный самой DB2, для вставки следующей строки. Спасибо:)

Это мой код:

private short APLSEQNUM;

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

Контраст, добавленный в сценарий создания таблицы DB2 для генерации идентификатора:

"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 )

Это исключение:

Используйте 1_


person Dawud    schedule 15.03.2011    source источник
comment
Спящий режим:? Вставить в 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_APLSEQNUM, MRT_ACMPNUM) значения (, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 15 марта 2011 г. 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions ПРЕДУПРЕЖДЕНИЕ: ошибка SQL: -803, SQLState: 23505 15 марта 2011 г. 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions ТЯЖЕЛАЯ: ошибка SQL SQL: SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1; RPS. TMRT 15 марта 2011 г. 17:37:44 org.hibernate.event.def.AbstractFlushingEventListener performExecutions SEVERE: не удалось синхронизировать состояние базы данных с сеансом org.hibernate.exception.ConstraintViolationException: не удалось вставить: [qa.gov.moi.rps .db.entity.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) org.java. 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.java:298) в org.hibernate.event.def.java: : 27) в org.hibernate.impl.SessionImpl.flush (SessionImpl.java:1000) в org.hibernate.impl.SessionImpl.managedFlush (SessionImpl.java:338) в org.hibernate.transaction.JDBCTransaction.commit (JDBCTransa ction.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.java .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: ошибка SQL DB2: 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. ErrorRoll совершение транзакции на org.hibernate.ejb.TransactionImpl.commit (TransactionImpl.java:71) на 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 (DelegatingMethod.java.Invoke (DelegatingMethod.java. .java: 597) в com.intellij.rt.execution.application.AppMain.main (AppMain.java:115) Вызвано: org.hibernate.exception.ConstraintViolationException: не удалось вставить: [qa.gov.moi.rps. db.entity.Medical_MRT] в org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:71) в org.hibernate.exception.JDBCExceptionHelper.convert (JDBCExceptionHelper.java:43) в org.hibernate.Pers. .insert (AbstractEntityPersister.java:2272) в org.hibernate.persister.entity.AbstractEnt ityPersister.insert (AbstractEntityPersister.java:2665) на org.hibernate.action.EntityInsertAction.execute (EntityInsertAction.java:60) на org.hibernate.engine.ActionQueue.execute (ActionQueue.java:279) на org.hibernate. .ActionQueue.executeActions (ActionQueue.java:263) в org.hibernate.engine. hibernate.event.def. DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:27) в org.hibernate.impl.SessionImpl.flush (SessionImpl.java:1000) в org.hibernate.impl.SessionImpl.managedFlush (SessionImpl.java:338 )nate.trans.trans .JDBCTransaction.commit (JDBCTransaction.java:106) в 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.jdbc.NonBatchingBatcher.addToBatch (NonBatchingBatcher.java : 23) at org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java:2252) ... еще 18   -  person esaj    schedule 15.03.2011


Ответы (2)


вот что мы сделали:

person Piotr Gwiazda    schedule 14.09.2011

мы создали последовательность в DB2: введите описание изображения здесь

в файле сопоставления гибернации:

Работает в кластерной среде, где многим экземплярам необходимо получить последовательность, а сгенерированная последовательность уникальна.

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

Вы пробовали использовать @GeneratedValue (strategy = GenerationType.SEQUENCE) или @GeneratedValue (strategy = GenerationType.IDENTITY)? Не уверен, что это действительно поможет ...

person Pat B    schedule 28.10.2011