2 votes

La relation one-to-many d'Hibernate ne se met pas à jour correctement.

J'ai deux tables Item et Property et un item peut avoir plusieurs propriétés. Je l'ai modélisé correctement (je pense) dans Hibernate et lorsque je charge l'objet ItemModel, toutes les propriétés se chargent correctement.

Le problème est que lorsque j'essaie de supprimer des propriétés et de les sauvegarder, les propriétés sont ajoutées à celles qui existent déjà.

ItemModel m = ...;
m.getPropertySet().size() // returns 5 initially
m.getPropertySet().clear();
// some update function which adds properties
m.getPropertySet().size(); // returns 1
...currentSession().saveOrUpdate(m);

Ce qui se passe, c'est que la base de données a maintenant 6 propriétés pour cette catégorie au lieu de 1. Que dois-je faire pour que cela fonctionne ?

Le modèle de mappage des propriétés des éléments ressemble à ceci

<set name="propertySet" cascade="all">
    <key column="item_id" not-null="true"/>
    <one-to-many class="Property"/>
</set>

4voto

Ryan Stewart Points 46960

Utilice cascade="all-delete-orphan" . Voir le premier exemple dans le guide de référence pour un aperçu des relations de ce type. En outre, s'il s'agit d'une bidirectionnel un-à-plusieurs alors ce côté (l'ensemble) doit être mis en correspondance avec inverse="true" afin que la relation soit déterminée uniquement en fonction de l'autre côté de la relation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X