我有一个User
个对象,addresses
set
到Address
。现在让我们说我需要获取1,000,000个用户并在某个报告中显示他们的地址。
Hibernate
方法是对sql
表创建一个User
调用,然后为每个用户再次调用Address
表。结果是总共1,000,001个呼叫和长查询时间。
另一方面,如果聚合所有外键(例如User_Id
)并运行IN
sql调用
FROM Address where User_Id IN (,,,,,,,,)
您将呼叫次数减少到2 - 一个用户表,一个减少到地址表,以便在一次呼叫中带来所有1,000,000个所需地址。
但这需要在应用方面做一些工作。不是很多工作,只是一个for loop
,但仍然。有可能让Hibernate以有效的方式去做吗?
请注意LAZY fetching
与此无关。对于我的用例,我需要一个EAGER fetching
。
答案 0 :(得分:0)
我建议您进行2次查询。我使用Java 8流。
{{1}}
另外我想建议在1个查询中不要获得1,000,000行,使用批处理。
答案 1 :(得分:0)
Hibernate将使用JOINS
生成单个查询。我不知道你正在使用什么样的配置。SELECT u FROM User u LEFT JOIN FETCH u.address
会通过连接给你地址。单个查询