Hibernate映射设置lazy ='false'

时间:2012-01-11 06:44:18

标签: hibernate mapping fetch lazy-evaluation

在hibernate映射中,我设置了属性lazy="false",这将获取父级的所有子记录。

这在整个申请中都在使用 这会在我的应用程序的特定模块中产生性能问题,其中我只想获取父记录。

我无法将lazy属性更改为true,因为它已在许多其他地方使用。有没有办法来解决这个问题?

如果需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:6)

这些在hibernate中没有这样的功能,因为它尊重你的lazy="false"。因此,我可以建议解决您的需求是使用另一个虚拟具体类扩展您的查询类,并为该类定义映射而不包含该子关联。

假设你有一个带有子映射的父类

class Parent{

     private List<Child> kids;

}

和您拥有的父母的映射是

<class name="Parent" table="PARENT">
// other properties
// child mapping
   <set name="kids" table="KIDS" lazy="false">
       <key column="parent_id"/>
       <one-to-many class="Child"/>
   </set>
</class>

然后你可以创建另一个扩展Parent类

的类
class MinimalParent extends Parent{
   // leave implementation as blank
}

然后将其映射为吼叫

<class name="MinimalParent" table="PARENT">
    // other properties
    // do not map child in this
</class>

在任何需要父对象的地方使用此MinimalParent类。希望你明白了!

答案 1 :(得分:3)

您应该将lazy =“true”设置为仅提取父级作为默认值,并使用带有“fetch join”的JPQL查询在任何需要的地方与子级一起获取父级,例如:

SELECT mag FROM Magazine mag JOIN FETCH mag.articles WHERE mag.id = 1