![](/img/trans.png)
[英]Hibernate Lazy Initialization exception even using Join Fetch in HQL queries
[英]Hibernate : fetch lazy collection with HQL
我有两个大表(每个表大于1亿行),我们称它们为“父级”和“子级”(父级与“子级”具有一对多的懒惰关系)。 当我使用联接提取时,查询速度非常慢,并且由于使用了限制,因此我还收到休眠警告“ HH000104 firstcollection maxresults,该值是使用集合获取在内存中应用的”。
所以我试图在两个单独的查询中获取数据:
-第一个查询使所有父母受到限制
-第二个查询获取在第一个查询找到的父ID中具有parent.id的子级
该解决方案执行得很好,但是尽管两个查询都是在同一会话中执行的,所以休眠状态不会将孩子与其父母聚合在一起。
我想知道是否有一种方法可以使用HQL或一些Java代码来实现:-我不想使用标准API(我需要重写许多查询,而我发现很难维护标准API查询)-我不想要将父/子关系更改为EAGER / BATCH,因为如果没有子项,我将无法查询父项
任何想法 ?
第二个查询不应仅获取子代:Hibernate无法知道每个父代的所有子代均已获取。
第二个查询应该让父母和他们的孩子在一起(但使用in
子句仅选择所需的父母,没有限制):
第一个查询,有一个限制:
select distinct p.id from Parent p where ...
第二个查询,没有限制:
select p from Parent p left join fetch p.children where p.id in :idsSelectedByTheFirstQuery
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.