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

问题描述 投票:0回答:1

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

@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是错的我认为问题是我加入它的方式可以帮助我这个

hibernate jpa persistence jpql
1个回答
0
投票

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

不要添加任何不需要的连接。它们只会减慢您的查询速度。您不在查询中使用已加入的carsscooter。 join子句的唯一作用是你的查询只返回companies,它与至少1个car和1个scooter相关联。但这似乎不是预期的行为。

如果你想连接scootercars实体是可选的,你需要使用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');

我在这里解释了JOIN FETCH子句以及其他更多细节初始化关联的选项:5 ways to initialize lazy relations and when to use them

© www.soinside.com 2019 - 2024. All rights reserved.