0

環境-

  1. Hibernate- クエリ キャッシュと第 2 レベルのキャッシュが有効になっている

  2. 使用されるキャッシュ - updatetimestampcache が永久に設定された Ehcache。

問題- エンティティ E の場合、テーブルに 2 つの行があります。そのため、setcacheable(true) を使用した条件を介して (すべての行をフェッチするための) クエリでは、最初に 2 番目のレベルのキャッシュとクエリ キャッシュが読み込まれます。

setcacheable(true) を使用した条件を介した同じクエリの以降の実行は、クエリ キャッシュから提供されます。ここまでは順調ですね。

問題 - エンティティ E の新しいオブジェクトが休止状態を使用して保存された後 (現在、エンティティ E のテーブルには 3 行ありません)、トランザクション サービス レイヤー メソッドを使用します。エンティティ E の行を取得するための追加のクエリ (setcacheable(true) を使用) は、2 つのオブジェクトのみを返します。その中で 3 つのオブジェクトを返す必要があります。

新しいエンティティがそのテーブルに保存されるときに、エンティティ E のクエリ キャッシュが検証されていないようです。

4

1 に答える 1

-1

SOこれが根本的な原因だと思います。私のアプリケーションがehcahceを使用している方法です。詳細は以下の通り

  1. 同じTomcatでホストされている2つの別々のアプリケーションがあります。
  2. これらのアプリケーションは両方とも同じ jar を使用しており (各アプリケーションのライブラリには jar があります)、データベースに接続し、 ehcache もロードします。

明らかに、アプリ A が挿入すると、それ自体の ehcache が無効になります。同じ tomcat でホストされている他のアプリケーション app B には独自の ehcahe リージョンがあるため、アプリケーション b は古いデータを引き続き使用します。

于 2013-07-24T09:17:31.490 に答える