Bonjour Eric,
Nous avons mis à jour qu'un côté des associations pour l'unique
raison de simplifier le code. Mais tu as raison, cette manière de
faire entraîne des graphs de persistance incohérents.
Si je comprends bien le post que tu donnes en exemple, quand
Hibernate détecte des incohérences, il semble prendre en compte la
version de l'entité propriétaire de l'association (par exemple
dans une association 1-n, l'entité du côté 1).
Seulement ce ne semble pas être ce qui arrive avec
personne#lotsDroits par exemple. En effet, c'est bien l'entité non
propriétaire de la relation qui est mise à jour et une fois la
session hibernate rechargée, nous nous retrouvons bien avec graph
cohérent avec les éléments précédemment ajoutés.
En regardant la doc d'hibernate que j'ai trouvée, ils parlent en
effet bien qu'il fasse mettre à jour les deux côtés, mais disent
seulement qu'il se servent de l'entité propriétaire pour résoudre
les conflits.
http://docs.jboss.org/hibernate/core/4.1/manual/en-US/html/ch01.html#tutorial-associations-usingbidir
J'ai donc plutôt l'impression que quand le graph est incohérent,
il prend d'abord en compte la propriété qui a été mise à jour et
si les deux l'ont été (de manière différente du coup), il prend la
version de l'entité propriétaire.
En tout cas, n'hésite pas à corriger la façon de mettre à jour ces
associations... surtout si cela peut entraîner des effets de bord
avec Hibernate Search.
Adrien
PS : en passant ManageUtilisateurPage.java est un bon exemple
Wicket de comment inutilement compliquer les développements en
utilisant des listes temporaires. C'est un artefact qui reste par
rapport aux autres interfaces qui gèrent bien plus simplement des
listes de même type.
Le 01/03/2013 04:51, Eric Chatellier a écrit :
Bonjour,
Dans cantharella, les associations sont bidirectionnelles
mais des modifications ne sont toujours faite que d'un seul coté.
Comme décrit dans ce commentaire:
http://stackoverflow.com/a/5460737/2038100
l'association devrait être référencées des deux cotés.
(apparemment la doc officielle en parle aussi, mais pas
moyen de retrouver le lien).
Le problème n'est pas visible à l’exécution car
dans le cas d'une application web, lors du rechargement
entre les pages, les associations sont bien valuées des
deux cotés.
Ce problème pourrait être à l'origine d'un effet
de bord dans l'indexation lucene.
Les droits sont ajoutés sur les utilisateurs:
personne#lotsDroits, mais le lot n'étant pas modifiés
lot#personnesDroits, hibernate ne peut pas détecter
que le lot a été modifié pour le réindexer.
Est-ce volontaire de ne pas gérer les bidirections
des deux cotés ?