Bonjour,
Je tente de faire une insertion d'un element dans une table dépendant d'une table pére( contrainte foreign key).
Pour des raisons particulières je n'ai pas mapper cette relation dans les fichiers de config.
Je fais donc appel à une "named query" qui remplie la table parent puis je sauvegarde mon objet, le tout dans une transaction.
Je suis en JDBC direct sans JTA.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Session session = null; Transaction tx = null; try { session = factory.openSession(); tx = session.beginTransaction(); MyObjet myObjet = new MyObjet(); /* Etape 1 */ Query query = session.getNamedQuery("test"); query.setString("id", "TEST_001"); query.executeUpdate(); //OK pas d'erreur /* Etape 2 */ session.save(critere);// erreur : org.hibernate.exception.ConstraintViolationException tx.commit(); } catch (Exception e) { if (tx != null) tx.rollback(); e.printStackTrace(); } finally { session.close(); }
Etant en théorie dans la même transaction ca ne devrait pas poser de problème, mais j'ai le message suivant :
Help!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Hibernate: INSERT INTO TAB1 (ID_TAB1,TYPE) VALUES(?,'XXX') numLineChanged : 1 Hibernate: insert into TAB2 (COL1, COL2, ID_TAB1) values (?, ?, ?) org.hibernate.util.JDBCExceptionReporter logExceptions ATTENTION: SQL Error: 2291, SQLState: 23000 org.hibernate.util.JDBCExceptionReporter logExceptions GRAVE: ORA-02291: violation de contrainte d'integrite (TEST.FK_LIEN_TAB2_TAB1) - cle parent introuvable org.hibernate.event.def.AbstractFlushingEventListener performExecutions GRAVE: Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) ... Caused by: java.sql.BatchUpdateException: ORA-02291: violation de contrainte d'integrite (TEST.FK_LIEN_TAB2_TAB1) - cle parent introuvable at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10720) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242) ... 9 more
Partager