JPQL 内连接和左连接
JPQL inner join and left join
我知道什么是联接以及如何简单地使用它们 SQL 但我找不到任何有关 Internet 的解释来查询具有关系的对象。我使用 entity,getList.size() 来查询与我的实体具有 oneToMany 或 ManyToMany 关联的对象。我想知道有没有办法查询对象及其所有关系。
public Person
@OneToMany
List<Cat>
@ManyToMany
List<DormRoom>
获取所有对象的方法是;
Person p=PersonDAO.getWithId(1L);
p.getCats.size();
p.getsDormRooms.size();
现在我想知道如何使用 JPQL、CriteriaBuilder 和 QueryDSL 获取完全评估的对象。
这叫做获取连接:
select distinct p from Person p left join fetch p.cats left join fetch p.dormRooms
where p.id = :id
注意:
- 至少在 Hibernate 中,只有当最多 1 个集合是一个包(即没有任何指定顺序列的列表)时,它才会起作用。
- 这将创建一个返回 cat * dormRooms 的笛卡尔积的查询。所以如果一个人有 100 只猫和 100 个宿舍,将检索 10,000 行。
我知道什么是联接以及如何简单地使用它们 SQL 但我找不到任何有关 Internet 的解释来查询具有关系的对象。我使用 entity,getList.size() 来查询与我的实体具有 oneToMany 或 ManyToMany 关联的对象。我想知道有没有办法查询对象及其所有关系。
public Person
@OneToMany
List<Cat>
@ManyToMany
List<DormRoom>
获取所有对象的方法是;
Person p=PersonDAO.getWithId(1L);
p.getCats.size();
p.getsDormRooms.size();
现在我想知道如何使用 JPQL、CriteriaBuilder 和 QueryDSL 获取完全评估的对象。
这叫做获取连接:
select distinct p from Person p left join fetch p.cats left join fetch p.dormRooms
where p.id = :id
注意:
- 至少在 Hibernate 中,只有当最多 1 个集合是一个包(即没有任何指定顺序列的列表)时,它才会起作用。
- 这将创建一个返回 cat * dormRooms 的笛卡尔积的查询。所以如果一个人有 100 只猫和 100 个宿舍,将检索 10,000 行。