假设我有:
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时遇到类似问题的人。
答案 0 :(得分:1)
编写一个特定的hibernate查询,以获取带有“join fetch”的学生课程,以便在单个查询中获取所有相关课程。例如:
from Student s left join fetch s.courses