休眠是否使用联接来自动加载相关对象

时间:2015-09-01 12:11:15

标签: java hibernate

考虑两个相关对象BillBillItem。所有账单都有几个账单项目。 Bill类的getItems已配置为OneToMany并且需要提取。

如果我选择一组账单(比如今天为一位客户提供),它会返回5张账单。每个账单都有几个账单项目。

Hibernate会在表BillBillItem上使用连接来一次性加载详细信息吗?或者hibernate会使用n + 1个查询,其中n是账单数量?

如果使用连接查询不是默认行为,有没有办法在这种情况下配置Hibernate使用join?或者这需要使用HQL和一些自定义编码来进行映射?

编辑: 我想这里已经介绍过:JPA eager fetch does not join

1 个答案:

答案 0 :(得分:0)

答案是"它取决于"。在一般情况下,当不经意地获取实体时,很容易获得可怕的N + 1选择。这就是为什么您需要观察查询的效果并验证他们是否正在执行您期望的操作。

围绕JPA / Hibernate性能优化进行了大量讨论,包括避免使用JOIN进行N + 1选择。