Будет ли Hibernate использовать настроенный EhCache 2-го уровня с этим поиском для нескольких идентификаторов - PullRequest
0 голосов
/ 17 октября 2018

Я использую Hibernate 4.3.11

Я настроил кэш 2-го уровня для своего класса Song, но не получаю много хитов, и мне интересно, так ли это, потому что я обычно получаю свой класс Song следующим образом.

 public static List<Song> getSongsFromDatabase(Session session, List<Integer> ids)
        {
            try
            {
                List<Song> songs = session
                        .createCriteria(Song.class)
                        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
                        .add(Restrictions.in("recNo", ids)).list();
                return songs;
            }
            catch (Exception e)
            {
                throw new RuntimeException(e);
            }
        }

Это просто получение по первичному ключу, но нужно ли использовать Ehcache по-другому?

Я думаю, что он работает только при использовании lookup one Id метод

public static Song getSongFromDatabase(Session session, Integer id)
    {
        try
        {
            return (Song) session.get(Song.class, id);
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }

1 Ответ

0 голосов
/ 31 октября 2018

Все зависит от того, как настроен кэш 2-го уровня.

Если сущность аннотирована @Cache, она действительно будет кэшироваться в течение session.get.

Для запросанужно сделать его кешируемым.Что означает в вашем случае сделать что-то вроде этого:

List<Song> songs = session
  .createCriteria(Song.class)
  .setCacheable(true) // here
  .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
  .add(Restrictions.in("recNo", ids)).list();
...