2016-12-28 12 views
1

私は設定されたL2キャッシュ(jhache/ehcache経由)でHibernate 5.2.6を使用しています。 私が最初に呼び出した後、IDHibernate Session.multiLoad L2キャッシュの問題

session.byMultipleIds(User.class).multiLoad(ids)

で複数のエンティティをロードするログとユーザーのエンティティで

select user0_.id as id1_20_0_ ... from user_data user0_ where user0_.id in (?,...,?) 

L2キャッシュに配置されている参照です。

2回目の呼び出しでは、同じSQL文がログに記録され、L2キャッシュからエンティティが取得されません。

L1キャッシュでは、この問題は発生しません(enableSessionCheck(true))。

予想された動作ですか、何かを誤って構成しましたか?

+0

良い解決策のように見えていません。その間に何か答えを見つけましたか? – Thomas

+0

私の答えを見てください。 –

答えて

0

私はヘルパークラスでそれを周りに働いてきた:

public class HibernateUtils { 

    static <T> List<T> byMultipleIds(Session session, Long[] ids, Class<T> entityClass) { 
     List<Long> notCached = new ArrayList<>(); 
     for (Long id : ids) { 
      if (!session.getSessionFactory().getCache().contains(entityClass, id)) { 
       notCached.add(id); 
      } 
     } 
     return session.byMultipleIds(entityClass).enableOrderedReturn(false).withBatchSize(ids.length).multiLoad(notCached); 
    } 

} 

しかし、それは、私は同じ問題に直面しています

関連する問題