如何在JPA JPQL Query中加入两个实体集合?

时间:2017-12-27 07:57:49

标签: hibernate jpa persistence jpql

我遇到的情况是我有一个拥有两个集合的实体让我们说

@Entity
Company

@OneToMany
Collection<Cars>

@OneToMany
Collection<Scooter>

这是我的jpql

select e from com.net.company e JOIN e.cars cr where cr.carname IN ('BMW');

工作正常返回公司

select e from com.net.company e JOIN e.cars cr JOIN e.scooter where cr.carname IN ('BMW');

不返回任何内容

我明白我的jpql错了我认为问题在于我加入它的方式可以帮助我这个

1 个答案:

答案 0 :(得分:0)

让我首先对JPQL和SQL中的查询进行一般性评论:

不要添加任何不需要的联接。它们只会减慢您的查询速度。 您不在查询中使用加入的carsscooter。 join子句的唯一效果是您的查询仅返回与{1}和1 companies相关联的car。但这似乎不是预期的行为。

如果您要将scooterscooter实体的连接设为可选,则需要使用cars(但话又说回来:如果您不参加,为什么要加入实体?使用它们):

LEFT JOIN

如果您要加入实体来初始化select e from com.net.company e LEFT JOIN e.cars cr LEFT JOIN e.scooter where cr.carname IN ('BMW'); 实体的关联映射属性,则需要使用company子句或JOIN FETCH子句:

LEFT JOIN FETCH

我在这里解释select e from com.net.company e LEFT JOIN FETCH e.cars cr LEFT JOIN FETCH e.scooter where cr.carname IN ('BMW'); 子句以及其他更多细节初始化关联的选项:5 ways to initialize lazy relations and when to use them