一尘不染

如何使用LEFT OUTER JOIN进行JPA查询

sql

基于这两个表(及其对应的实体):

profiles(id, email, name)
items(id, profile_id, rank, price)

Profile(email, name)
Item(profile, rank, price)

我必须列出所有配置文件,并按其项目的最佳排名进行排序(实际上,这是“顶级配置文件”列表)。

这是您可以在PHPMyAdmin中执行的SQL请求,例如:

SELECT AVG(i.rank) AS rank, p.* FROM profiles AS p LEFT OUTER JOIN items AS i ON p.id = i.profile_id GROUP BY p.id ORDER BY rank DESC;

我是JPA的新手,我找不到一些使用CriteriaBuilder进行LEFT OUTER JOIN的示例(如果这样做是正确的话)。

如果有人能以正确的方式引导我,我将不胜感激(我不是要求别人做我的工作,只是要有很好的线索)。

非常感谢你!:)


阅读 293

收藏
2021-05-05

共1个答案

一尘不染

该查询可以在JPQL中表示如下:

SELECT p, AVG(i.rank) as rank
FROM Item i RIGHT JOIN i.profile p
GROUP BY p
ORDER BY rank DESC

请注意,您不能JOIN在JPA中编写任意的,只能JOIN在关系上使用,因此您需要在RIGHT JOIN此处,因为您的关系是单向的,并且关系的来源应在左侧。

可以使用JPA 2.0 Criteria API以非常简单的方式来翻译此查询,但是,我上次检查该查询时,Hibernate的Criteria
API的实现不支持正确的联接(并且Play框架在下面使用了Hibernate)。因此,我认为您必须在这种情况下使用JPQL查询。

2021-05-05