【发布时间】:2015-09-01 12:11:14
【问题描述】:
考虑两个相关的对象Bill 和BillItem。所有账单都有几个账单项目。
Bill 类有 getItems,它被配置为带有急切获取的 OneToMany。
如果我选择一组返回 5 张账单的账单(比如今天为一位客户)。每张账单都有几个账单项目。
Hibernate 是否会在 Bill 和 BillItem 表上使用连接来一次性加载详细信息?或者 hibernate 会使用 n+1 个查询,其中 n 是账单数量?
如果使用连接查询不是默认行为,在这种情况下有没有办法配置 Hibernate 以使用连接?或者这是否需要使用 HQL 和一些自定义编码来进行映射?
编辑: 我想这里已经介绍过了:JPA eager fetch does not join
【问题讨论】:
-
您可以在persistence.xml中启用sql日志以查看正在执行的实际查询
-
我相信您可以进行 EAGER 加载,并且每次都带上 BillItems,或者您可以延迟加载它们,仅当您实际进行第二次(或第三次等)查询时决定使用该字段。虽然不确定它是如何工作的,但 EAGER 也可能更快地执行多个查询——这很奇怪,因为这样会使 de 选项变得毫无用处。