2016-12-28 137 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); 
    } 

} 

不過,這並不像看起來很好的解決