繁体   English   中英

能否使用HIbernate访存类型LAZY但有时使用EAGER

[英]Can you use HIbernate fetch type LAZY but use EAGER sometimes

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

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

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

  1. 为了提高SQL效率
  2. 因为我想在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

您可以使用Criteria setFetchMode设置运行时的获取模式,如下所示,

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-模式换标准关联/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM