JPQL 中的 LEFT JOIN ON()
Posted
技术标签:
【中文标题】JPQL 中的 LEFT JOIN ON()【英文标题】:LEFT JOIN ON() in JPQL 【发布时间】:2011-06-26 22:37:41 【问题描述】:我有两个实体:
User
: id:long, name:String
Player
: id:long, owner:User, points:int
现在我想在一个 JPQL 查询中选择一个用户和他的关联玩家。在 SQL 中,我会这样做:
SELECT u.*, p.* FROM User u
LEFT JOIN Player p ON (p.owner_id = u.id)
WHERE u.name = ...
我的第一直觉是在 JPQL 中这样做
SELECT u, p FROM User u LEFT JOIN Player p ON (p.owner = u) WHERE u.name = ...
但我认为 JPQL 不支持 ON
子句。但是我确实需要它,因为User
没有引用Player
(Player
以外的许多东西都可以附加到User
)。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:你有一个从Player
到User
的关系,所以你可以反转加入来关注它:
SELECT u, p FROM Player p RIGHT JOIN p.owner u WHERE ...
【讨论】:
当你想在公共领域加入不相关的实体时无用的答案以上是关于JPQL 中的 LEFT JOIN ON()的主要内容,如果未能解决你的问题,请参考以下文章
SQL中left join on 、right join on、inner join on之间的区别
解析sql语句中left_joininner_join中的on与where的区别
sql语句中left join和inner join中的on与where的区别分析