[英]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.