gpt4 book ai didi

java - hibernate : fetch lazy collection with HQL

转载 作者:行者123 更新时间:2023-12-02 04:03:33 24 4
gpt4 key购买 nike

我有两个大表(每个> 1亿行),我们称它们为父表和子表(与子表具有惰性一对多关系的父表)。当我使用连接获取时查询非常慢而且我还收到一个 hibernate 警告“HH000104 firstresult maxresults指定与集合获取应用在内存中”,因为我使用了限制。

所以我试图在两个单独的查询中获取数据:
- 第一个查询获取所有有限制的 parent
- 第二个查询获取第一个查询找到的父 id 中包含 Parent.id 的子项

此解决方案执行得非常好,但是 hibernate 不会将子级与其父级聚合,尽管这两个查询是在同一 session 中执行的。

我想知道是否有办法使用 HQL 或一些 java 代码来实现这一点:- 我不想使用标准 API(我需要重写许多查询,并且我发现标准 API 查询很难维护)- 我不想将父/子关系更改为 EAGER/BATCH,因为如果没有子项,我将无法查询父项

有什么想法吗?

最佳答案

第二个查询不应仅获取子项:Hibernate 将无法知道每个父项的所有子项均已获取。

第二个查询应该获取 parent 及其 child (但使用 in 子句仅选择所需的 parent ,并且没有限制):

第一个查询,应用了限制:

select distinct p.id from Parent p where ... 

第二个查询,没有应用限制:

select p from Parent p left join fetch p.children where p.id in :idsSelectedByTheFirstQuery

关于java - hibernate : fetch lazy collection with HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34606845/

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