休止状態のクエリ キャッシュが実際にどのように機能するかを理解しようとしています。私が今見ているのは、新しいエンティティをデータベースに挿入するときに、Hibernate がその第 2 レベルのキャッシュを自動的に更新しないことです (ただし、Hibernate 呼び出しのみを使用しています)。私が見つけた唯一の方法は、新しいエンティティを挿入した後にキャッシュを手動で消去することでした。
より具体的な例を次に示します。多くのアイテムを持つことができる Container と呼ばれる永続的なエンティティがあります。すべてのアイテムをキャッシュしたかった:
@Cache(使用法 = CacheConcurrencyStrategy.READ_WRITE) クラスアイテム { // 残りのコード ... } クラスコンテナ{ @Cache(使用法 = CacheConcurrencyStrategy.READ_WRITE)
public List getItems() { ... } // 残りのコード ... }
私が気付いた問題は、次の場合です。
1) いくつかのコンテナをデータベースからメモリに読み込みます (対応するアイテムと一緒に)
String hql =
"from Container c left join fetch c.items where c.type = 1";
List<Item> list = hibernateTemplate.find(hql);
2) 選択したコンテナに新しいアイテムを挿入
hibernateTemplate.save(item)
3) 最初の手順を繰り返して
から、3 番目の手順で、2 番目の手順で挿入した項目が表示されません。新しいアイテムを挿入した後にキャッシュを手動で消去した場合にのみ表示されます。
sessionFactory.evictCollection("Container.items", updatedContainerId)
私の直感では、Hibernate はそのようなキャッシュの無効化を自動的に行うべきだと言っています。誰かがそれが働いているのを見たことがありますか? 私は何か間違ったことをしていますか、それともサポートされていないだけですか?
答えてくれてありがとう。こんにちはトム