6

Hibernateの第2レベルのキャッシュについて説明する必要があります。

  1. Hibernateの第2レベルのキャッシュはどのように機能しますか?

  2. Java EE環境で起動するサーバー上のエンティティクラスに@Cacheableアノテーション(休止状態のアノテーションに関して)があるテーブルからすべてのデータをロードしますか?

  3. これらのテーブルが更新されたときにキャッシュが同期されますか?また、その方法は?

  4. 最後に、興味のあるテーブルが更新されたときにDAOコードに通知を受け取る方法はありますか?(テーブルの更新を親密にすることができるリスナーを探しています)。

4

2 に答える 2

2
  1. Hibernateの第2レベルのキャッシュはどのように機能しますか?

    エンティティがキャッシュ可能としてマークされていて、第2レベルのキャッシュを構成している場合、休止状態は最初の読み取り後にエンティティを第2レベルのキャッシュにキャッシュします。

    Hibernateは、hibernateの仕様に従うキャッシュ実装をプラグインする柔軟性を提供します。第2レベルのキャッシュと構成オプションの詳細については、Hibernateのマニュアルを参照してください。

  2. Java EE環境で起動するサーバー上のエンティティクラスに@Cacheableアノテーション(休止状態のアノテーションに関して)があるテーブルからすべてのデータをロードしますか?

    これを実現するための構成はないと思います。間接的には、起動時にテーブル全体を読み取ることでこれを実現できます。これは、システムの起動時間に悪影響を与える可能性があります。(私はこれを好まない)。エンティティが外部で変更された場合、hibernateはそれを同期できず、古いデータを取得することになります。

  3. これらのテーブルが更新されたときにキャッシュが同期されますか?また、その方法は?

    テーブルの更新後、キャッシュはすぐには更新されません。更新されたレコードをフェッチするための後続の呼び出しはデータベースに移動し、hibernateはセッションタイムスタンプを使用してこれを内部的に実現します。

  4. 最後に、興味のあるテーブルが更新されたときにDAOコードに通知を受け取る方法はありますか?(テーブルの更新を親密にすることができるリスナーを探しています)。

    いいえ、休止状態はこれをサポートしていません。

于 2012-10-22T18:55:23.530 に答える
0
  1. それは、ここで答えるには広すぎる質問です。

  2. いいえ。キャッシュは遅延して読み込まれます。Hibernate API またはクエリを使用してデータベースからキャッシュ可能なエンティティを取得するたびに、このエンティティはキャッシュに格納されます。後で、session.get()キャッシュ内にあるエンティティの ID を使用して が呼び出される場合、データベース クエリは必要ありません。

  3. 更新が Hibernate を介して行われる場合、キャッシュが更新されます。外部アプリケーション、SQL クエリ、または一括更新 HQL クエリを使用して行われた場合、キャッシュは更新を認識しません。そのため、どのエンティティをキャッシュ可能にするか、どの Time-to-Live を選択するかなどに注意する必要があります。古い値を返すことが問題にならない場合もあれば、受け入れられない場合もあります。

  4. いいえ。

于 2012-10-22T18:46:29.210 に答える