JPQL, wie man etwas NICHT auswählt

Ich habe ein ziemlich einfaches SQL, das ich durchführen muss.

Ich habe einProcessUser, Role und einProcessUserRole Tabelle. Ein direktes Viele-zu-Viele

Ich möchte alle auswählenProcessUserdas hat ja auch eine rolle von admin.

Mein JPQL schlägt jedoch fehl, weil mein Benutzer auch einen Rollenbeauftragten hat, sodass er in der Liste abgerufen wird.

Hier ist das JPQL:

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

Die generierte SQL ist:

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'
            )
        )

Antworten auf die Frage(5)

Ihre Antwort auf die Frage