[英]Struggling to convert a left join query in JPQL
我正在努力转换此sql查询
SELECT feature.*, rolefeature.roleId, rolefeature.permission
FROM feature
Left JOIN rolefeature
ON feature.featureId = roleFeature.featureId
and roleFeature.roleId = ?
效果很好。
到JPQL。 我有这个
select f, rf.role.roleId as roleId, rf.permission
from Feature f
LEFT JOIN f.roleFeatures rf
and rf.role.roleId = :roleId
但似乎抱怨AND关键字。 我有点茫然。 如果我使用WHERE代替AND,则不会返回正确的数据
首先, and
子句在这里毫无意义。 您需要一个where子句。
其次,对rf.role
查询隐式地在RoleFeature和Role之间建立内部联接。 您可以通过检查生成的SQL来查看它。 您需要做第二次左联接才能访问角色。
第三,如果在where子句中对角色ID进行了限制,则左联接将成为内部联接。 因此,您需要与JPQL中的on
子句等效。 我不认为JPQL有它,但是Hibernate使用with
关键字支持它:
select f, role.roleId as roleId, rf.permission
from Feature f
left join f.roleFeatures rf
left join rf.role role with role.roleId = :roleId
也许你可以用
left join rf.role role
where role.roleId is null or role.roleId = :roleId
JPA 2.0 JPQL不支持ON,但它是JPA 2.1草案的一部分。
EclipseLink 2.4里程碑版本已经提供了ON支持,
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#ON
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.