批量加载延迟加载的 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 属性的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 延迟加载

JavaWeb系列——Hibernate——延迟加载(转)

hibernate 延迟加载

Hibernate - 为啥延迟加载 String 属性? [复制]

Hibernate延迟加载

hibernate延迟加载