在hibernate映射中,我设置了属性lazy="false"
,这将获取父级的所有子记录。
这在整个申请中都在使用 这会在我的应用程序的特定模块中产生性能问题,其中我只想获取父记录。
我无法将lazy
属性更改为true
,因为它已在许多其他地方使用。有没有办法来解决这个问题?
如果需要更多信息,请告诉我。
答案 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