У меня есть пара сущностей Hibernate, A и B, которые связаны через двунаправленное отношение «многие ко многим», как описано здесь - то есть каждая сущность имеет мешок, ссылающийся на коллекцию объекта другого типа, с таблицей ссылок, содержащей первичный ключ каждого объекта.
Я также использую кэширование Hibernate L2 для кэширования значений коллекции, например:
<bag name="xyz" table="XYZ" ...>
<cache usage="nonstrict-read-write"/>
</bag>
Проблема, с которой я сталкиваюсь, заключается в том, что при обновлении отношения с одной стороны кэшированная коллекция элементов с другой стороны не обновляется.
Например:
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();
Коллекция as по-прежнему содержит ссылку на a, хотя состояние базы данных отражает тот факт, что связь была удалена. После аннулирования кэша Hibernate вернет правильные результаты.
Есть ли в hibernate какие-либо механизмы для обработки аннулирования кэша связанных сущностей, или мне нужно удалить связь с обоих концов?
Я использую Hibernate 3.2.6.