Bonjour,
Avec Hibernate 3, je ne parviens pas, dans une même transaction, à supprimer une donnée et à en recréer une, dès lors que je réutilise un champ "unique" de la donnée supprimée.
Par exemple si je définis une classe DCategory ayant un identifiant technique Id et un champ "unique" Name.
Il n'est pas possible d'enchainer les étapes ci-dessous dans une seule transaction :
1. sélectionner une catégorie existante
2. supprimer la catégorie
3. en créer une autre ayant le même champ Name (mais bien sûr un autre Id).
Si je tente l'opération je provoque:
org.hibernate.util.JDBCExceptionReporter - ERROR: duplicate key violates unique constraint "category_name_key"
Pour m'en sortir, j'exécute session.flush() après la suppression.
Mais cette solution n'est pas très "propre".
Pourquoi l'opération de suppression n'est elle pas exécutée tout de suite ?
J'ai pris un exemple simpliste, mais dans la réalité j'ai besoin de pouvoir mettre complètement à jour un graphe d'objets dans lequel certains objets conserveront leur champ"unique" et d'autres pas.
Dans une telle situation, je suis bien obligé de tout détruire pour tout recréer ensuite.
PS:
Le mapping qui illustre mon exemple simpliste:
<hibernate-mapping>
<class
name="bean.DCategory"
table="Category"
dynamic-update="false"
dynamic-insert="false"
>
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<property
name="name"
type="string"
unique="true"
column="name"
/>
<property
name="comment"
type="string"
unique="false"
column="comment"
/>
</class>
|