These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: [many-to-many] violation de contrainte FK
PostPosted: Sat May 27, 2006 4:58 am 
Newbie

Joined: Sat May 27, 2006 4:39 am
Posts: 2
Hibernate 3
Oracle XE

Bonjour, mon problème est que je n'arrive pas à sauvegarder dans la base des objets contenant des listes lorsque la relation est * * (many-to-many). J'ai à chaque fois une violation de contrainte de clé étrangère dans la table intermédiaire.

Voici la partie qui nous intéresse de mon fichier de mapping
(Country contient une liste de Vaccine, la relation est * *)
Code:
<bag name="vaccineList" cascade="save-update">
           <key column="country_id"/>
           <many-to-many column="vaccine_id"      class="applicationServer.NGModel.geography.Vaccine"/>
</bag>


Voici mon code (country1 et country2 sont correctement instanciés et contiennent bien une liste)
Code:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();

       session.beginTransaction();
      
       session.save(NGModelInstances.country1);
       session.save(NGModelInstances.country2);
             
       session.getTransaction().commit();
      
       HibernateUtil.getSessionFactory().close();





Et enfin voici l'erreur que j'obtient:
Code:
Hibernate: select max(id) from COUNTRY
Hibernate: insert into COUNTRY (NAME, VISA, id) values (?, ?, ?)
Hibernate: insert into COUNTRY (NAME, VISA, id) values (?, ?, ?)
Hibernate: update AREA set ACREAGE=?, NATURAL_RESERVE=?, ACCESS_WAY=? where id=?
Hibernate: update AREA set ACREAGE=?, NATURAL_RESERVE=?, ACCESS_WAY=? where id=?
Hibernate: update VACCINE set NAME=? where id=?
Hibernate: update VACCINE set NAME=? where id=?
Hibernate: update AREA set ACREAGE=?, NATURAL_RESERVE=?, ACCESS_WAY=? where id=?
Hibernate: update AREA set ACREAGE=?, NATURAL_RESERVE=?, ACCESS_WAY=? where id=?
Hibernate: update VACCINE set NAME=? where id=?
Hibernate: update PRESENCE_FREQUENCIES set area_id=null, sort_order=null where area_id=?
Hibernate: update PRESENCE_FREQUENCIES set area_id=null, sort_order=null where area_id=?
Hibernate: update PRESENCE_FREQUENCIES set area_id=null, sort_order=null where area_id=?
Hibernate: update PRESENCE_FREQUENCIES set area_id=null, sort_order=null where area_id=?
Hibernate: update AREA set country_id=? where id=?
Hibernate: update AREA set country_id=? where id=?
Hibernate: insert into vaccineList (country_id, vaccine_id) values (?, ?)
Hibernate: insert into vaccineList (country_id, vaccine_id) values (?, ?)
10:23:31,312  WARN JDBCExceptionReporter:71 - SQL Error: 2291, SQLState: 23000
10:23:31,312 ERROR JDBCExceptionReporter:72 - ORA-02291: violation de contrainte d'intégrité (VLAD.FK27A055F345B9BA0F) - clé parent introuvable

10:23:31,312  WARN JDBCExceptionReporter:71 - SQL Error: 2291, SQLState: 23000
10:23:31,312 ERROR JDBCExceptionReporter:72 - ORA-02291: violation de contrainte d'intégrité (VLAD.FK27A055F345B9BA0F) - clé parent introuvable

10:23:31,328 ERROR AbstractFlushingEventListener:300 - Could not synchronize database state with session


A noté que dans cet exemple j'ai tenté la génération en cascade, celà ne fonctionne pas mieux si j'enregistre à l'avance mes instances de vaccine contenu dans les listes et que j'enlève cascade.

Quelqu'un voit il comment se débarasser de cette violation de contrainte (sans utiliser lazy bien sur, j'ai besoin que mon instance country enregistre ses listes dans la base) ?


Question subsidiaire : Pourquoi lorsque j'utilise cascade, hibernate me fait des opérations d'update sur les éléments de la liste au lieu de faire des insert dans les tables (qui sont vides à ce moment là).

Merci à ceux qui prendront de leur temps pour me venir en aide !!! ;-)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.