1

私の知る限り、Hibernate では、エンティティとコレクションを構成して、2 番目のレベルのキャッシュに格納できます。

Hibernate はいつこれらのキャッシュされたエンティティを二次キャッシュから読み取ろうとし、いつ DB にヒットしますか? Hibernate は、呼び出しによってエンティティをロードするときSesssion.get()、およびプロキシ (コレクションを含む) を初期化するときに、第 2 レベルのキャッシュからのみ読み取りますか? HQL クエリまたは Criteria クエリを実行するときに、Hibernate が 2 番目のレベルのキャッシュにヒットすることはありますか?

例?

4

2 に答える 2

4

第2レベルのキャッシュには、IDによるエンティティのみが含まれるため、IDによってエンティティを取得する場合(つまり、プロキシを暗黙的に取得、ロード、または解決する場合)、第2レベルのキャッシュにアクセスできます。他のクエリ(hal、criteria)は、少なくともクエリキャッシュが使用されていない限り、キャッシュをバイパスしてDBにヒットします。

于 2011-01-20T23:23:32.207 に答える
2

(注:このタイプの質問に答える最も簡単な方法は、show_sqlをオンにして、Hibが生成するクエリを確認することです。)

クエリがレコードのPKのみを返す場合(反復クエリの場合など)、Hibはキャッシュを使用できます。

リンクされたオブジェクトを取得する場合、キャッシュも使用できます。

ただし、ここで正確なルールを示すことはできません。また、答えは使用する方言の能力に依存すると思います。

于 2008-10-23T10:15:55.533 に答える