1

このブログ投稿(ここで参照) では、SQLQuery は Hibernate セッション キャッシュを使用しないと述べています。ただし、a) 証拠がない、b) SQLQuery.addEntity を使用していないため、Hibernate がそのキャッシュを使用できるようにするための情報が得られる可能性があります。

ドキュメントは、何らかの方法でキャッシュすることについて言及していません。

addEntity を使用すると、SQLQuery はセッション キャッシュを使用しますか?

編集:ドキュメントのこのセクションには次のように書かれています:

オブジェクトを save()、update() または saveOrUpdate() に渡すたびに、および load()、get()、list()、iterate() または scroll() を使用してオブジェクトを取得するたびに、そのオブジェクトが追加されますセッションの内部キャッシュ。

addEntity() は list() がオブジェクトを返すことを許可するため、キャッシュを使用していることを意味します。どうすれば確認できますか? これらの同じドキュメントでは、キャッシュには「contains」メソッドがあり、2 番目のレベルのキャッシュを参照できますが、セッション キャッシュを参照する方法はありません。

編集 #2 : Hibernate クエリのロギングをオンにすることで、キャッシュしていないように見えますが、おそらくいくつかの状況でキャッシュされるでしょう。

4

2 に答える 2

2

beny23 さんの答えは正しくないと思います。setCacheableセッションキャッシュではなく、第2レベルのキャッシュを指していると思います。

エンティティがセッション キャッシュにあるかどうかを確認するには、 を使用できますSession.contains()。簡単なテストを行うこともできます: エンティティを取得し、変更し、セッションを閉じて、mod がデータベースにあるかどうかを確認します。

于 2012-08-23T22:04:52.610 に答える
0

SQLQueryの javadocs によると、 setCacheableQueryメソッド (デフォルトでは false)を提供するインターフェースを拡張するため、次のことができるはずです。

Query query = session.createSQLQuery(
  "select * from my_table e")
  .addEntity(MyEntityClass.class)
  .setCacheable(true);

さらに、 setCacheModeおよびsetCacheRegionメソッドを使用して、キャッシュ領域の設定を検討することもでき ます。

于 2012-08-23T21:57:57.590 に答える