我有一个非常简单的SQL我需要执行。JPQL,如何不选择东西
我有一个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是:
select distinct processuse0_.id as id8_, processuse0_.position as position8_, processuse0_.username as username8_, processuse0_.organization_id as organiza9_8_, processuse0_.passwordHash as password4_8_, processuse0_.fromEmail as fromEmail8_, processuse0_.firstname as firstname8_, processuse0_.lastname as lastname8_, processuse0_.processes as processes8_ from ProcessUser processuse0_ inner join ProcessUserRoles roles1_ on processuse0_.id=roles1_.userId inner join Role role2_ on roles1_.roleId=role2_.id where ( role2_.name not in ( 'sysadmin' ) )
你说你要包括ADMIN的角色,但是您的示例显示ROLE NAME NOT IN SysAdmin。你可以解释吗? – 2009-10-16 15:14:26
@Shervin - 你需要小心你的标签;下面的大多数答案都是不正确的,因为您已将问题标记为“SQL”(现在已更改为JPQL) – ChssPly76 2009-10-16 16:01:25
不,我不想包含管理员(系统管理员)。 ProcessUser是一个用户和一个系统管理员,因此我的选择没有得到我想要的。如果有sysadmin角色,我希望用户被忽略。 – 2009-10-18 14:27:25