2016-12-28 117 views
1

我正在配置二级缓存(通过jhache/ehcache)使用Hibernate 5.2.6。 我想通过ID休眠Session.multiLoad二级缓存问题

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

加载多个实体的第一个电话后看到

select user0_.id as id1_20_0_ ... from user_data user0_ where user0_.id in (?,...,?) 
日志和用户实体

被放置到二级缓存。

第二个调用在日志中触发相同的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); 
    } 

} 

不过,这并不像看起来很好的解决