J'ai des problèmes avec une relation parent-enfant ici. Quand je persiste du côté de la collection (côté enfant), j'ai 2 nouveaux enfants au lieu d'un.hiberner bidirectionnel insère un à plusieurs insère des doublons
Voici est-sont les applications de mise en veille prolongée:
<set name="children" inverse="true"
cascade="all,delete-orphan" lazy="true"
order-by="CHILD_ID desc">
<key column="PARENT_ID" />
<one-to-many class="com.mycompany.Child" />
</set>
<many-to-one name="parent" class="com.mycompany.Parent" not-null="true">
<column name="PARENT_ID" />
</many-to-one>
Voici le code java utilisé pour ajouter l'enfant dans la relation bidirectionnelle:
// Persist logic...
Parent p = myParentService.findById(1);
Child c = new Child();
p.addChild(c);
myChildService.persist(child);
// Inside the parent class...
public void addChild(Child child)
{
if (this.children == null)
this.children = new LinkedHashSet<Child>();
this.children.add(child);
child.setParent(this);
}
Si je supprime la « this.children.add (enfant);" part tout fonctionne comme prévu. Ceci est déroutant car la documentaion Hibernate here dit que les relations bidirectionnelles sont censées fonctionner de cette façon. Qu'est-ce que je rate?
est setParent également ajouter l'enfant? –
Non, setParent ne fait qu'un simple assign. – user333903
La façon de gérer l'association bidirectionnelle est correcte, vous devez définir les deux côtés du lien. Mais que voulez-vous dire exactement par * Je reçois 2 nouveaux enfants *? Où? Dans la base de données? Dans la collection? Tous les deux? Comment avez-vous implémenté 'equals' /' hashCode'? Utilisez-vous le 'id 'dans votre implémentation? Pouvez-vous réellement le montrer? –