org.hibernate.exception.ConstraintViolationException:无法更新 - 数据库中的自动增量列为 NULL

org.hibernate.exception.ConstraintViolationException: could not update - Auto-increment column in DB is 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)

当我更新时,CUSTOMERS table (TABLEID=9) 中的列 (COL=1) 似乎是 NULL。该值由数据库 (DB2) 自动生成,应在客户对象中设置。

列数据库属性:

客户的 HBM.xml(突出显示的是出现 Null 值的列(不应为 Null):

希望有人能帮助解决我的问题。

我找到了解决问题的方法。

我在客户的 HBM.xml 中添加了 insert="false" 和 update="false"。

在 hibernate 3.1.1 版本中,这两个参数,即使它不存在,生成的 SQL 是它不包括 tknSysGenId 但在 3.6.10 版本中,它被包括在内并且因为它的值为空,它会在更新 Database.So 中的 table 时抛出错误,我们需要明确声明列 tknSysGenId 不应作为参数之一包含在更新语句中。

所以它的新值是: