急切地选择实体中的所有对象

时间:2013-11-06 16:50:06

标签: hibernate jpa orm jpa-2.0

如何使用一个查询在hibernate中选择整个对象图?我将fetch = FetchType.LAZY设置为我的实体的所有依赖对象类型字段。但我也想提供一种方法,它将选择所有对象(如在所有字段上指定FetchType.EAGER)。怎么做?

3 个答案:

答案 0 :(得分:0)

您可以使用Hibernate.initialize()加载对象的所有延迟加载属性。我不确定你想要遍历你的对象图有多深,但我相信这将涵盖至少80%的实际有用案例。

答案 1 :(得分:0)

您可以使用命名查询,例如,如果您有:

Class Teacher {
    List<Course> courses;
    List<Student> students;
}

使用:

select t from Teacher t inner join fetch t.courses tcs inner join fetch t.students tss where ....

然后你有老师的课程和学生热切地加载,它不依赖于 fetch = FetchType.LAZY

答案 2 :(得分:0)

我们正在使用Ejb。如果为惰性对象调用getter,则从数据库中获取它。缺点是,不仅有一个带有连接的查询,每个延迟获取对象都有一个查询。