Ehcacheが提供する第2レベルのキャッシュを備えたHibernateがあります。
私は、キャッシュされたコレクションを持つ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に最小限の影響でそれを実行させる方法を探しています。