JPQL内连接和左连接

时间:2015-01-06 13:12:39

标签: jpa join jpql querydsl

我知道什么是连接以及如何在普通SQL中使用它们但是我找不到任何关于用关系查询对象的互联网解释。我使用实体,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来获取完全被驱逐的对象。

1 个答案:

答案 0 :(得分:1)

它被称为获取联接:

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行。