gpt4 book ai didi

jpa - JPQL,如何不选择某些东西

转载 作者:行者123 更新时间:2023-12-04 00:43:22 25 4
gpt4 key购买 nike

我需要执行一个非常简单的 SQL。

我有一个 ProcessUser , Role和一个 ProcessUserRole table 。直接的多对多

我要全选 ProcessUser也有一个 admin 角色。

但是我的 JPQL 失败了,因为我的用户也有角色官员,所以它在列表中检索。

这是JPQL:

entityManager.createQuery("SELECT p FROM " + ProcessUser.class.getName() 
+ " p join p.roles role WHERE role.name NOT IN ('sysadmin')").getResultList();

生成的 SQL 是:

选择
不同的 processuse0_.id 作为 id8_,
processuse0_.position 作为 position8_,
processuse0_.username 作为 username8_,
processuse0_.organization_id 为organiza9_8_,
processuse0_.passwordHash 作为 password4_8_,
processuse0_.fromEmail 为 fromEmail8_,
processuse0_.firstname 作为 firstname8_,
processuse0_.lastname 作为 lastname8_,
processuse0_.processes as processes8_

ProcessUser processuse0_
内部联接
ProcessUserRoles 角色1_
在 processuse0_.id=roles1_.userId
内部联接
角色 role2_
在roles1_.roleId=role2_.id
在哪里
(
role2_.name 不在 (
'系统管理员'
)
)

最佳答案

使用子查询的正确 JPQL 语法:

SELECT p FROM ProcessUser p
WHERE p.id NOT IN (
SELECT p2.id FROM ProcessUser p2
JOIN p2.roles role
WHERE role.name='sysadmin'
)

关于jpa - JPQL,如何不选择某些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1578644/

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