gpt4 book ai didi

java - 努力在 JPQL 中转换左连接查询

转载 作者:行者123 更新时间:2023-12-01 15:35:58 26 4
gpt4 key购买 nike

我正在努力转换此 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

关于java - 努力在 JPQL 中转换左连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8836802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com