У меня Hibernate с кэшем 2-го уровня, предоставленным Ehcache.
У меня есть Parent
и Child
классы с Parent.children
кэшированной коллекцией.
Когда я выполняю следующий код:
Session session = DataSessionFactory.openSession();
Transaction tx = session.beginTransaction();
Parent parent = // load from Session
Child child = new Child();
child.setParent(parent);
session.saveOrUpdate(child);
session.flush();
session.refresh(parent);
tx.rollback();
session.close();
session = DataSessionFactory.openSession();
tx = session.beginTransaction();
parent = session.load(Parent.class, parent.getId());
System.out.println(parent.getChildren());
Последняя строка завершается с ошибкой, пытаясь загрузить Child
, который не существует. После расследования я обнаружил, что причина в том, что он пытается загрузить Child
, которые были созданы и откатаны в предыдущей транзакции.
Как правильно настроить кэширование или откатить транзакцию, чтобы кэш сбора очищался правильно? Я не хочу очищать все кэши сбора при откате, спасибо. Ищите способ заставить Hibernate или Ehcache сделать это для меня с минимальным воздействием.