J'ai une paire d'entités Hibernate, A et B, qui sont liées par une relation plusieurs-à-plusieurs bidirectionnelle, comme décrit here - c.-à-d., Chaque entité a un sac faisant référence à une collection de l'autre type d'entité, avec une table de liens comprenant la clé primaire de chaque entité.Hibernate L2 Mise en cache et relations many-to-many
J'utilise aussi la mise en cache Hibernate L2 pour mettre en cache les valeurs de collecte, comme ceci:
<bag name="xyz" table="XYZ" ...>
<cache usage="nonstrict-read-write"/>
</bag>
Le problème que je me rends compte que lorsque je mets à jour la relation d'un côté, la collection en cache des éléments de la l'autre côté n'est pas mis à jour.
Par exemple:
A a = session.get(1L, A.class);
B b = a.getBs().get(0);
Long bId = b.getId();
a.getBs().remove(0) // delete the B from A
// ... flush and commit the transaction...
B b2 = session.get(bId, B.class);
Collection<A> as = b2.getAs();
Collection comme contient encore une référence à un, même si l'état de base de données reflète le fait que la relation a été supprimée. Après avoir invalidé le cache, Hibernate retournera les résultats corrects.
Est-ce que hibernate a des mécanismes pour gérer l'invalidation du cache des entités liées, ou est-ce que je devrais supprimer la relation des deux extrémités? Je utilise Hibernate 3.2.6.