繁体   English   中英

覆盖休眠映射文件中相关实体的延迟加载设置

[英]Override lazy loading setting for related entities in a hibernate mapping file

我有一个映射文件,它为一些相关实体设置了lazy=false 这对于很多用例来说都是有意义的,但是也有一些例外。 问题是对于这些情况,我不想在查询时获取相关的关联,这在时间上非常昂贵。

实体映射的示例。

<class name="Category" table="category">
    <id name="id" type="string">
      <column length="50" name="id"/>
      <generator class="uuid"/>
    </id>
    <property name="name" type="string">
      <column length="100" name="name" not-null="true"/>
    </property>
    <set inverse="true" lazy="false" name="categorySourcesList">
      <key>
        <column length="50" name="categoryid" not-null="true"/>
      </key>
      <one-to-many class="CategorySource"/>
    </set>
  </class>

我的问题是,是否有一种方法可以覆盖在映射文件中设置的lazy值,无论是在我自定义写入的sql-query还是启用延迟加载作为DAO中的参数之一? 或通过一些注释?

是的,您可以覆盖带注释的或xml映射的关联获取策略。

休眠文档

    Criteria criteria = session().createCriteria(MyClass.class);
    criteria.add(Restrictions.eq("id", "1234"));        
    criteria.setFetchMode("children",FetchMode.EAGER);
    return (MyClass) criteria.uniqueResult();

这将返回一个MyClass实例,并热切地获取其子级。

抱歉,您不能用LAZY替代EAGER加载,而只能以其他方式替代。

因此,您需要将关联定义为LAZY,并在使用联接的查询中覆盖该关联。 可能还有其他方式可以做到这一点,但我现在恐怕就是这些。

暂无
暂无

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

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