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 ?



--
Adrien Cheype
Ingénieur en Systèmes d'Information
Service « Informatique Scientifique et Appui aux Partenaires du Sud »
Direction du Système d'Information (DSI)
http://www.ird.fr/dsi/
http://www.ird.fr/informatique-scientifique/

INSTITUT DE RECHERCHE POUR LE DEVELOPPEMENT
BP A5 - 98848 Nouméa - Nouvelle Calédonie
Tél. +687 260 789