gpt4 book ai didi

java - Hibernate 使用 sql 调用每一行来获取关系 - 而不是聚合到一个 IN 子句

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:38 24 4
gpt4 key购买 nike

我有一个 User 对象,其 addresses setAddress。现在假设我需要获取 1,000,000 个用户并在某个报告中显示他们的地址。

Hibernate 的实现方法是创建一个对 User 表的 sql 调用,然后为每个用户创建对 Address 表的另一次调用。结果是总共有 1,000,001 次调用,并且查询时间很长。

另一方面,如果您聚合所有外键(例如 User_Id)并运行 IN sql 调用

FROM Address where User_Id IN (,,,,,,,,)

您将调用次数减少到 2 次 - 一次调用用户表,一次调用地址表,以便在一次调用中获取所有 1,000,000 个所需地址。

但这需要在应用程序端进行一些工作。工作量不大,只是一个 for 循环,但仍然如此。是否可以要求 Hibernate 以有效的方式做到这一点?

请注意,LAZY fetching 与此无关。对于我的用例,我需要一个EAGER fetching

最佳答案

Hibernate 将使用 JOINS 生成单个查询。我不知道您使用的是哪种配置。SELECT u FROM User u LEFT JOIN FETCH u.address 将通过联接为您提供地址。单个查询

关于java - Hibernate 使用 sql 调用每一行来获取关系 - 而不是聚合到一个 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com