我有一个班级歌曲,其中包含与CoverArt班级的惰性关联

@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.ALL})
@JoinColumn(name = "recNo")
private List<CoverArt> coverArts;


很好,我通常不需要CoverArt对象,但有时我需要


为了提高SQL效率
因为我想在EventThread上使用Song类,并且用户可能尝试在HibernateSession之外访问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.htmlhttps://kodejava.org/how-do-i-set-the-fetch-mode-for-criteria-association/

关于java - 能否使用HIbernate访存类型LAZY但有时使用EAGER,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56498156/

10-12 12:26
查看更多