Java 覆盖hibernate映射文件中相关实体的延迟加载设置
我有一个映射文件,它为一些相关实体设置了Java 覆盖hibernate映射文件中相关实体的延迟加载设置,java,hibernate,overriding,lazy-loading,Java,Hibernate,Overriding,Lazy Loading,我有一个映射文件,它为一些相关实体设置了lazy=false。这对于很多用例都是有意义的,但也有一些例外。问题是我不想在查询时获取这些案例的相关关联,这在时间上非常昂贵 实体的映射示例 <class name="Category" table="category"> <id name="id" type="string"> <column length="50" name="id"/> <generator class="
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查询中,或者是在DAO中启用lazy load作为参数之一?或者通过一些注释?AFAIK您不能用LAZY覆盖急切的加载,但只能反过来
因此,您需要定义延迟关联,并在使用联接的查询中覆盖该关联。可能还有其他方法可以做到这一点,但恐怕我现在只知道这些。是的,您可以覆盖带注释或xml映射的关联获取策略
这将返回一个MyClass
的实例,并急切地获取其子对象
Criteria criteria = session().createCriteria(MyClass.class);
criteria.add(Restrictions.eq("id", "1234"));
criteria.setFetchMode("children",FetchMode.EAGER);
return (MyClass) criteria.uniqueResult();