Эффективная загрузка нескольких сущностей по id в Hibernate

Итак, я получаю несколько экземпляров определенной сущности по id:

for(Integer songId:songGroup.getSongIds()) {
   session = HibernateUtil.getSession();
   Song song = (Song) session.get(Song.class,id);
   processSong(song);
}

Это генерирует SQL-запрос для каждого id, поэтому мне пришло в голову, что я должен сделать это в одном, но я не смог найти способ получить несколько сущностей за один вызов, кроме как выполнив запрос. Поэтому я написал запрос

return (List) session.createCriteria(Song.class)
       .add(Restrictions.in("id",ids)).list();

Но, если я включу кэширование второго уровня, не означает ли это, что мой старый метод сможет вернуть объекты из кэша второго уровня (если они были запрошены ранее), но мой запрос всегда будет обращаться к базе данных.

Какой правильный способ сделать это?

15
задан Vlad Mihalcea 25 October 2019 в 06:23
поделиться