批量加载延迟加载的 Hibernate 属性
Posted
技术标签:
【中文标题】批量加载延迟加载的 Hibernate 属性【英文标题】:Batch load a lazily loaded Hibernate property 【发布时间】:2010-08-20 07:08:12 【问题描述】:假设我有一个:
class Student
int id;
String name;
List<Course> courses; //Lazily loaded as per Hiberante config
现在假设我有一个学生列表,为了优化所有这些学生的获取列表,我将批量选择它们,而不是让 Hibernate 一个一个地调用单独的 SQL。我无法关闭延迟加载,因为在许多其他代码路径中我不会访问课程属性。
我当然可以编写一个函数,接收 courseId 列表并返回一个 List,然后将这些对象附加到 Hibernate 会话,但这些对象不会与 Hibernate 加载的 Student 对象相关联。如果我调用类似 student.setCourses() 的方法,那么我会遇到 Hibernate 会认为会话是脏的并尝试更新 Student 对象的风险。
我真的很想听听在使用 Hibernate 时遇到类似问题的人的意见。
【问题讨论】:
【参考方案1】:编写一个特定的休眠查询来获取具有“加入获取”的学生类,从而在单个查询中获取所有相关课程。示例:
from Student s left join fetch s.courses
【讨论】:
以上是关于批量加载延迟加载的 Hibernate 属性的主要内容,如果未能解决你的问题,请参考以下文章