JPQL,如何不选择

She*_*ari 12 jpa jpql

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

我有一个ProcessUser,RoleProcessUserRole表.一个直截了当的多对多

我想选择所有ProcessUser也有管理员角色的人.

但是我的JPQL失败是因为我的用户也有角色官,因此在列表中检索它.

这是JPQL:

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

生成的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'
            )
        )

Chs*_*y76 18

使用子查询的正确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'
 )
Run Code Online (Sandbox Code Playgroud)