Salut !
Je suis surpris par le comportement d'hibernate ; pourriez vous m'apporter des informations complémentaires sur mon épineux problème:
Je gère une relation n-n entre un objet wapiti et un objet lama.
Lama possède un attribut de type collection, contenant les Wapiti associés et inversemment.
le mapping est fait de la façon suivante:
dans Lama.hbm.xml
Code:
<set
name="wapitis"
table="join_wapiti_lama"
lazy="true"
cascade="none"
sort="unsorted"
>
<key
column="lama_id"
>
</key>
<many-to-many
class="Wapiti"
column="wapiti_id"
outer-join="auto"
/>
</set>
et dans wapiti.hbm.xml
Code:
<set
name="lamas"
table="join_wapiti_lama"
lazy="true"
cascade="save-update"
sort="unsorted"
>
<key
column="wapiti_id"
>
</key>
<many-to-many
class="Lama"
column="lama_id"
outer-join="auto"
/>
</set>
Ces 2 types d'objets sont rattachés à un objet de type Vue. Quand je sauve cet objet Vue, il essaie de sauver en cascade mes Wapitis et mes Lamas (ainsi que les lignes correspondantes de la table join_wapiti_lama).
j'obtiens alors l'erreur suivante:
Code:
Hibernate: insert into join_wapiti_lama (wapiti_id, lama_id) values (?, ?)
Hibernate: insert into join_wapiti_lama (lama_id, wapiti_id) values (?, ?)
WARN - net.sf.hibernate.util.JDBCExceptionReporter.logExceptions():57 - SQL Error: 1, SQLState: 23000
ERROR - net.sf.hibernate.util.JDBCExceptionReporter.logExceptions():58 - ORA-00001: unique constraint (SYS_C00262760) violated
la "unique constraint" faisant référence à la clé primaire (wapiti_id, lama_id) de la table de jointure.
Auriez vous une idée sur comment sauver tous ces objets sans qu'il y ait 2 tentative de sauver chaque relation wapiti-lama ?
Merci pour votre aide.
Hibernate version: 2.1
Name and version of the database you are using: Oracle 10g
The generated SQL (show_sql=true):
Hibernate: insert into join_wapiti_lama (wapiti_id, lama_id) values (?, ?)
lorsqu'il essaie de sauver la relation à partir de Wapiti
Hibernate: insert into join_wapiti_lama (lama_id, wapiti_id) values (?, ?)
lorsqu'il essaie de sauver la relation à partir de Lama