【问题标题】:Batch load a lazily loaded Hibernate property批量加载延迟加载的 Hibernate 属性
【发布时间】: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 时遇到类似问题的人的意见。

【问题讨论】:

    标签: java hibernate lazy-loading


    【解决方案1】:

    编写一个特定的休眠查询来获取具有“加入获取”的学生类,从而在单个查询中获取所有相关课程。示例:

    from Student s left join fetch s.courses
    

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2017-12-28
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多