2010-12-29 4 views
1

J'utilise jpa pour persister un objet. Quand j'essaye de le persister je reçois l'exception suivante:problème dans l'objet persistant en utilisant jpa

Create failure,Error occurred while create Chargebasis 
           <openjpa-1.2.2-SNAPSHOT-r422266:778978M-OPENJPA-975 fatal general error> org.apache.openjpa.persistence.PersistenceException: The transaction has been rolled back. See the nested exceptions for details on the errors that occurred. 
    at org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2163) 
    at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010) 
    at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908) 
    at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679) 
    at org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:989) 
    at org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:592) 

    .... 

Caused by: <openjpa-1.2.2-SNAPSHOT-r422266:778978M-OPENJPA-975 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: DB2 SQL Error: SQLCODE=-407, SQLSTATE=23502, SQLERRMC=TBSPACEID=2, TABLEID=517, COLNO=1, DRIVER=3.50.152 
FailedObject: prepstmnt 154143024 INSERT INTO XYZ (empid, empname,CREATE_TS, UPDT_TS) VALUES (?, ?, ?, ?) [org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement] 
    at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4245) 
    at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4210) 
    at org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException(DB2Dictionary.java:504) 
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102) 
    at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:72) 
    at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushBatch(BatchingPreparedStatementManagerImpl.java:195) 
    at org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:63) 
    .. 
Caused by: com.ibm.db2.jcc.b.lm: DB2 SQL Error: SQLCODE=-407, SQLSTATE=23502, SQLERRMC=TBSPACEID=2, TABLEID=517, COLNO=1, DRIVER=3.50.152 

Est-ce parce que le champ d'empname est vide? COLNO = 1 fait-il référence à la première (empid) ou à la deuxième colonne (nom_emp)? J'utilise open jpa comme fournisseur jpa.

Répondre

2

Selon this documentation vous devez regarder SQL0407 et cela signifie:

Les valeurs NULL ne peuvent pas dans la colonne ou variable & 5.

Alors, en effet, vous essayez de mettre NULL dans une colonne non nullable.

1

COLNO = 1 est associé à la deuxième colonne (nom_emp). Vous devriez vérifier s'il est vide ou s'il viole une contrainte unique.

+0

je l'ai vérifié, ce n'est pas nul – akshay

+0

je suis également sûr qu'il n'a pas de contrainte unique violet comme son set firstfinding max id, puis en l'incrémentant – akshay

+0

empname était nulle, donc il donnait erreur.Je resovle l'erreur en définissant certains par défaut valeur à empname. – akshay