org.hibernate.exception.ConstraintViolationException: не удалось обновить — столбец автоинкремента в БД имеет значение NULL

Я обновляю пакет hibernate3 моей системы с версии «3.1.1» до «3.6.10».

Поскольку я уже перенес его на версию 3.6.10, я вижу исключение:

[6/12/17 9:54:57:365 SGT] 000000a2 SystemOut     O [DEBUG] [8adbbb8205c9a02b50015c09a02d15e00000|TKN_ENQ_REQ|10.91.48.113] 12/06/17 09:54 ib.CustomerVerification  - [Ex
ception Caught Caused By:]
<b>org.hibernate.exception.ConstraintViolationException: could not update: </b>[com.dbs.tms.main.pojo.Customer#8adbbb825c9a02b5015c9a02da3e0001]
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2613)
        at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2495)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2822)
        at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:64)
       ... 
       ....
       ...
       ..
<b>Caused by: com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: Assignment of a NULL value to a NOT NULL column "TBSPACEID=5, TABLEID=9, COLNO=1" is not allowed
.. SQLCODE=-407, SQLSTATE=23502, DRIVER=3.64.133 </b>
        at com.ibm.db2.jcc.am.bd.a(bd.java:675)
        at com.ibm.db2.jcc.am.bd.a(bd.java:60)
        at com.ibm.db2.jcc.am.bd.a(bd.java:127)

Кажется, что столбец (COL = 1) в таблице CUSTOMERS (TABLEID = 9), когда я обновляю, имеет значение NULL. значение автоматически генерируется базой данных (DB2) и должно быть установлено в объекте клиента.

Свойства столбца БД:

введите здесь описание изображения

HBM.xml клиента (выделен столбец со значениями Null (не должен быть Null):

введите здесь описание изображения

Надеюсь, кто-то может помочь решить мою проблему.


person bbd224    schedule 12.06.2017    source источник


Ответы (1)


Я нашел решение моей проблемы.

Я добавил insert="false" и update="false" в HBM.xml клиента.

В версии гибернации 3.1.1 два параметра, даже если они отсутствуют, сгенерированный SQL не включает tknSysGenId, но в версии 3.6.10 он включается, и поскольку его значение равно нулю, он выдает ошибка при обновлении таблицы в базе данных. Поэтому нам нужно явно указать, что столбец tknSysGenId не должен быть включен в оператор обновления в качестве одного из параметров.

Таким образом, новое значение этого:

введите здесь описание изображения

person bbd224    schedule 12.06.2017