繁体   English   中英

如何使用LEFT OUTER JOIN创建JPA查询

[英]How to make a JPA query with LEFT OUTER JOIN

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

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

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

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

这是SQL请求,就像您可以在PHPMyAdmin中执行它一样,例如:

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的例子(如果这是正确的事情)。

如果有人能以正确的方式引导我,我真的很感激(我不是要求某人给我这份工作,只是有良好的线索)。

非常感谢你! :)

此查询可以用JPQL表示,如下所示:

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

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

这个查询可以在JPA 2.0 Criteria API中以非常简单的方式进行翻译,但是,我最后一次检查它时,Hibernate的Criteria API实现不支持正确的连接(Play Framework使用Hibernate)。 所以,我认为在这种情况下你必须使用JPQL查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM