批量加载延迟加载的Hibernate属性

时间:2010-08-20 07:08:12

标签: java hibernate lazy-loading

假设我有:

class Student {
    int id;
    String name;
    List<Course> courses; //Lazily loaded as per Hiberante config
}

现在假设我有一个List学生,并且为了优化所有这些学生的获取List,我是批量选择它们而不是让Hibernate逐个调用单独的SQL。我无法关闭延迟加载,因为在许多其他代码路径中我将无法访问课程属性。

我当然可以编写一个函数,它将接受一个courseId列表并返回一个List,然后将这些对象附加到Hibernate会话中,但这些对象不会与Hibernate加载的Student对象相关联。如果我调用student.setCourses()之类的东西,那么我就会遇到Hibernate认为会话变脏并尝试更新Student对象的风险。

我非常希望听到使用Hibernate时遇到类似问题的人。

1 个答案:

答案 0 :(得分:1)

编写一个特定的hibernate查询,以获取带有“join fetch”的学生课程,以便在单个查询中获取所有相关课程。例如:

from Student s left join fetch s.courses