【发布时间】:2020-07-01 14:04:17
【问题描述】:
我了解到 Hibernate 仅在需要时才允许通过使用延迟加载来查询子元素。
如果我们有:
@Entity
public class Payment {
...
@ManyToOne(fetch = FetchType.LAZY)
private Debtor debtor;
}
我希望当我从数据库中获取付款时,Hibernate 在债务人属性中设置一个占位符并仅在严格要求时获取债务人。
因此,如果我使用 getter 方法从我的付款对象中获取债务人:
Debtor debtor = payment.getDebtor();
我预计线程会阻塞,直到 Hibernate 执行 SELECT 查询并返回 Debtor 对象。
那么为什么我总是得到一个 HibernateLazyLoading 异常,它迫使我在 PaymentRepository 中编写一个自定义提取查询,从而减慢了我的初始查询速度因为我会使用 EAGER FetchType?
那么,如果 FetchType.LAZY 不能按自然预期的方式工作,为什么还会存在呢?
【问题讨论】:
-
您能否展示出现此问题的示例代码。根据我的经验,延迟加载异常仅在您尝试访问事务外部实体的延迟加载字段时发生。当实体不再附加时。
标签: java spring hibernate spring-data hibernate-mapping