簡體   English   中英

org.hibernate.exception.ConstraintViolationException:無法更新-DB中的自動增量列為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)

當我更新為NULL時,似乎CUSTOMERS表(TABLEID = 9)中的列(COL = 1)。 該值由數據庫(DB2)自動生成,應在“客戶對象”中設置。

列數據庫屬性:

在此處輸入圖片說明

客戶的HBM.xml(突出顯示為具有Null值的列(不應為Null):

在此處輸入圖片說明

希望有人可以幫助解決我的問題。

我找到了解決我擔憂的方法。

我在客戶的HBM.xml中添加了insert =“ false”和update =“ false”。

在hibernate 3.1.1版本中,兩個參數(即使不存在)也會生成SQL,因為它不包含tknSysGenId,但在3.6.10版本中已包含該參數,並且由於它的值為null,因此將拋出因此,我們需要明確聲明tknSysGenId列不應作為參數之一包含在Update語句中。

因此,它的新價值是:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM