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ählenProcessUser
das 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' ) )