2016-04-24 13 views
1

に設定する方法hibernateで動作するようにehcacheを構成し、スプリングデータで動作するように休止状態にし、たとえば、私が 'T findOne(ID var1);'というメソッドを使うと、 CrudRepositoryクラスのすべてが正常に動作し、値はキャッシュから取得されます。Springデータにキャッシュ内のCrudRepositoryのfindAllメソッドを最初に、そしてデータソース内の後にのみ、

このような振る舞いは、Iterable findAll(Iterable var1);メソッドに適用されるはずです。特定のIDがキャッシュ内に存在するかどうかを確認してから、どのIDがキャッシュ内にすでに存在し、どのIDがキャッシュ内に存在しているかに基づいてクエリを形成するのは容易であるからです。 たとえば、キャッシュにIDの{1,2,3}のアイテムがあり、findAll({1,3,4,5})を呼び出そうとすると、クエリには{4,5}しか含まれません。また、findAll({1,3})を呼び出すと、データソースへのクエリはまったく実行されず、すべてのデータがキャッシュから取得されます。

これは私の期待です。しかし、実際には、すべてのIDがすでにキャッシュに入っている場合でも、バネデータは常に完全な要求を形成します。予想される行動を強制する方法はありますか?

ps:私はクエリをキャッシュできることを知っていますが、このケースはかなり異なります。引数でクエリをキャッシュしたくないので、引数リストを別のアイテムとして扱います

答えて

1

基本的なspring-data jpaリポジトリ(jpaには現在複数のIDでフェッチするAPIはありません)ではできないようですが、 。

しかし、あなたはあなたのJPAリポジトリ(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations)を拡張

もちろん、Hibernate 5.1以降を使用している場合。

それはMultiIdentifierLoadAccess.withのmathod(https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/MultiIdentifierLoadAccess.html#with-org.hibernate.CacheMode-

とL2キャッシュを管理する必要がありますが、それがお役に立てば幸いです。

+0

Thx、最初の解決策は私のためにうまくいきます。 – user3231055

関連する問題