【发布时间】:2010-12-07 09:51:32
【问题描述】:
我需要执行一个非常简单的 SQL。
我有一个ProcessUser、Role 和一个ProcessUserRole 表。直接的多对多
我想选择所有具有管理员角色的ProcessUser。
但是我的 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_, 处理使用0_.position 作为 position8_, processuse0_.username 作为 username8_, processuse0_.organization_id 作为organiza9_8_, 进程使用0_.passwordHash 作为密码4_8_, 进程使用0_.fromEmail作为fromEmail8_, processuse0_.firstname 作为 firstname8_, processuse0_.lastname 作为 lastname8_, processuse0_.processes 作为 processes8_ 从 ProcessUser 进程use0_ 内部联接 ProcessUserRoles 角色1_ 在 processuse0_.id=roles1_.userId 内部联接 角色role2_ 在角色1_.roleId=role2_.id 在哪里 ( role2_.name 不在 ( '系统管理员' ) )【问题讨论】:
-
您说要包含 ADMIN 角色,但您的示例显示 ROLE NAME NOT IN SysAdmin。你能解释一下吗?
-
@Shervin - 你需要小心你的标签;以下大多数答案不正确,因为您已将问题标记为“SQL”(现已更改为 JPQL)
-
不,我不想包含管理员 (sysadmin)。 ProcessUser 是用户和系统管理员,因此我的选择没有得到我想要的。如果具有系统管理员角色,我希望用户被省略。