2017-06-12 1 views
0

Je suis en train de mettre à jour le paquetage hibernate3 de mon système de la version "3.1.1" à "3.6.10".org.hibernate.exception.ConstraintViolationException: impossible de mettre à jour - La colonne Auto-increment dans DB est NULL

Comme je l'ai déjà migré vers la version 3.6.10, je vois une exception:

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

Il semble que la colonne (COL = 1) dans la table CLIENTS (TABLEID = 9), lorsque Je mets à jour est NULL. la valeur est générée automatiquement par la base de données (DB2) et doit être définie dans l'objet client.

colonne DB Propriétés:

enter image description here

Client hbm.xml (mises en évidence, la colonne connaît des valeurs nulles (ne doit pas être nul):

enter image description here

quelqu'un Hope pourrait aider à résoudre mon problème

Répondre

0

J'ai trouvé la solution à mon inquiétude

J'ai ajouté insert = "false" et update = "false" dans le fichier HBM.xml du client. Dans la version 3.1.1 de Hibernate, les deux paramètres, même s'ils ne sont pas présents, le SQL généré est qu'il n'inclut pas le tknSysGenId mais dans la version 3.6.10, il est inclus et puisque la valeur de celui-ci est null, il génère une erreur lors de la mise à jour de la table dans la base de données. Nous devons donc indiquer explicitement que la colonne tknSysGenId ne doit pas être incluse dans l'instruction Update en tant que paramètre.

Ainsi, la nouvelle valeur de celui-ci est:

enter image description here