我正在使用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/