Hibernacja: wyczyść pamięć podręczną drugiego poziomu kolekcji, a kasuj elementy

Mam problem Hibernacja nie aktualizuje pamięci podręcznej drugiego poziomu dla zbioru elementów, które podlegają usuwaniu kaskadowemu.

Detale

Załóżmy, że mamy obiekt Parent, który ma kolekcję Parent.myChildren obiektów potomnych. Teraz mamy również obiekt Ludzie z kolekcją Humans.myAllHumans i wszystkie obiekty Rodzica i Dziecka znajdują się w tej kolekcji.
Teraz mysession.delete (rodzic) a wszystkie dzieci są kaskadowo usuwane z bazy danych, ale pamięć podręczna kolekcji Humans.myAllHumans nie jest aktualizowana! Nadal zakłada się, że kaskadowe usunięte obiekty znajdują się w bazie danych i trafiliśmy na następujący wyjątek podczas próby późniejszej iteracji kolekcji:
org.hibernate.ObjectNotFoundException: Brak wiersza o podanym identyfikatorze: [foo.Child # 751]

Próbowano podejść

1) PróbowałemSessionFactory.evictCollection () podejście, ale ponieważ rozumiem, że nie jest to transakcja bezpieczna i trudna, usuwa dane z pamięci podręcznej drugiego poziomu, nie chcę tego.

2) Mogę również ręcznie (programowo) usunąć każdy obiekt z kolekcji myAllHumans. W tym przypadku hibernacja aktualizuje pamięć podręczną drugiego poziomu. To podejście, którego chciałbym uniknąć, ponieważ sprawia, że ​​kasowanie kasowe jest bezużyteczne.

Spodziewany

Chciałbym, aby hibernacja była wystarczająco inteligentna, aby automatycznie aktualizować pamięć podręczną kolekcji. Czy to możliwe?
Używam teraz EhCache, czy uważasz, że użycie innej implementacji pamięci podręcznej lub skonfigurowanie EhCache może pomóc?

questionAnswers(3)

yourAnswerToTheQuestion