У меня есть класс Песня, который содержит ленивую ассоциацию с классом Обложка.
@OneToMany(fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinColumn(name = "recNo")
private List<CoverArt> coverArts;
Это нормально, обычно мне не нужен объект CoverArt, но иногда он мне нужен.
Итак, как бы я изменил такой метод, как
public static List<Song> getSongsWithCoverArtFromDatabase(Session session, List<Integer> ids)
{
Criteria c = session
.createCriteria(Song.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.add(Restrictions.in("recNo", ids));
List<Song> songs = c.list();
return songs;
}
так что он получил CoverArt для каждой песни




Вы можете использовать setFetchMode из Criteria, чтобы установить режим выборки во время выполнения, как показано ниже:
Criteria c = session
.createCriteria(Song.class)
.setFetchMode("coverArts", FetchMode.EAGER)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.add(Restrictions.in("recNo", ids));
Для получения дополнительной информации https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/FetchMode.html и https://kodejava.org/how-do-i-set-the-fetch-mode-for-criteria-association/
Спасибо, это работает, но кажется, что FetchMode.EAGER устарел для FetchMode.JOIN, возможно, поэтому я изо всех сил пытался найти ответ