2011-11-14 4 views
3

2つのプロパティ(external-idsubsidiary-id [それは外部キー])とプライマリdbキーの複合ビジネスキーを持つエンティティ(Hibernateクエリインターフェイスを持つJPAアノテーション)を持っています。HibernateとEhcache-すべての「選択」がエンティティキャッシュを通過することを確認する方法

「子会社に関して」実行され、その複合キーを使用してこれらのエンティティを照会/更新/挿入する必要があるJavaSEマルチスレッドプロセスがあります(それらのデータセットはexternal-idsです)。

このようなプロセスが一度ロードされると、その子会社を挿入/更新/削除しようとするプロセスは他にないことが保証できます。

私が望むのは、起動時にその子会社のすべての既存のエンティティをロードしてから、キャッシュを通過するためのすべてのクエリを[externalId,subsidiaryId]とし、dbを逃すことができない場合のみです。プロセスからのスレッドの1つがエンティティを挿入する場合はもちろん、そのキャッシュに追加する必要があります。

どのような行動をとるのが最適ですか?

質問キャッシュがあることはわかっていますが、私が収集できるものは、のすべてが最初に間違っていることがあります。すべて[externalId,subsidiaryId]のペアです。

おかげで、私はこの問題を調査して停止しなければならなかったが、今、私はそれに戻って来ていることを、私はそれが合理的なようですだと思い、私は

更新
を依頼してくださいについては明らかではないよ何があればクエリーキャッシュとJB Nizetの回答のみが適用可能であることを示しています。
JB Nizetの答えは興味深いので、私はそれを使用するかもしれません(まだ分かりません)。

答えて

2

私はエンティティに2番目のレベルのキャッシュを使用し、起動時にすべての補助金のエンティティをクエリします(これは2番目のレベルのキャッシュを満たします)。[externalId, subsidiaryId][id]にマップするアプリケーションキャッシュを初期化します。

次に、あなたが与えられた[externalId, subsidiaryId]を持つエンティティを探しているたびに、最初のIDがキャッシュにない場合は、クエリを実行

  • 、その後、アプリケーションキャッシュからそのIDを取得し、更新アプリケーションキャッシュ、およびIDがキャッシュにある場合に見つかったエンティティ
  • を返し、二次キャッシュにアクセスし、DB
+0

こんにちはJB Nizetを打つ避けることができますそのIDを使用してエンティティを取得し、ご意見ありがとうございます。あなたの提案された行動コースは、キャッシュのメンテナンスを必要とします。私のマルチスレッドのアプリケーションは、これらのエンティティを追い越しながら追加します。私のためにORMのファサードをキャッシュに使用することの利点は、私がこれらのケースに対して追加の処理を行う必要がないためです。これが唯一のオプションであれば、私はおそらく私はクエリキャッシュを使うほうが良いかもしれないと思っています。私はあなたがこれを行うには、ORMのfacedeの中に別の方法があると思う場合は聞いてみたい。 – Ittai

+0

私は別の方法があるとは思わない。クエリキャッシュは、クエリを実行することによってのみ作成できます。これらのクエリは、まだキャッシュされていない場合は、最初にデータベースに移動します。 –

+0

ええ、私は、クエリキャッシュ自体に関して異なる方法はないことを知っています、私はエンティティキャッシュに関して異なる方法を望んでいました。 dbに行く前にidを逃したときに、[externalId、subsidiaryId]のペアを探すように定義するのと同じようなものです。 – Ittai

関連する問題