2016-12-28 3 views
1

Я использую Hibernate 5.2.6 с настроенным кэшем L2 (через jhache/ehcache). Я хочу, чтобы загрузить несколько объектов по идентификаторуПроблема с кэшем Hibernate 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.

Второй вызов вызывает один и тот же оператор 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); 
    } 

} 

Но это не выглядит как хорошее решение

Смежные вопросы