hibernate - 如何在 Hibernate 中左加入获取多个 child ?

标签 hibernate hql fetch

我正在使用hibernate,并且在创建获取对象的所有子级的hql 查询时遇到了麻烦。

例如:对象用户有一个汽车列表和一个 friend 列表。

为了让用户使用他的汽车,我将使用以下查询:

from User u left join fetch u.cars where u.id = ?

这很好用,所以我认为通过以下查询很容易让用户使用他的汽车和他的 friend :
from User u left join fetch u.cars left join fetch u.friends where u.id = ?

但这给了我以下错误:

HibernateException: cannot simultaneously fetch multiple bags



现在我的问题是:在 hibernate 中获取多个 child 的正确方法是什么?

最佳答案

最多一个子集合必须是一个包(即声明为一个列表)。将其他集合声明为 Set,它将起作用。

但请注意,执行此类 fetch 连接会产生行的笛卡尔积。如果两个集合都有 100 个元素,则此类查询将从数据库中检索 10,000 行。执行获取一个集合的第一个查询和获取另一个集合的第二个查询有时会更有效(从而将检索到的行数减少到 200)。这也是避免您遇到的问题的一种方法:

select u from User u left join fetch u.cars where u.id = :id;
select u from User u left join fetch u.friends where u.id = :id;

关于hibernate - 如何在 Hibernate 中左加入获取多个 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607207/

相关文章:

java - hibernate 从子表中选择查询

hibernate - 从Hibernate Grails中选择数据库

java - JPA 2 中仅基于一个纯字符串的孤立删除

java - HQL 中的日期限制

json - 使用 React hook 获取数据在嵌套 obj 属性上返回未定义

javascript - 如何使用 Typescript 和 fetch 处理 204 状态?

git - 如何从git存储库中获取旧代码

hibernate - 非键列的@OneToOne 映射

java - Hibernate 7.0.2 : javax. 验证.NoProviderFoundException

hibernate - @Query 注解使用 like %?1%