Ho un SQL abbastanza semplice che devo eseguire.JPQL, Come NON selezionare qualcosa
Ho un ProcessUser
, Role
e una tabella ProcessUserRole
. Un diretto molti-a-molti
Desidero selezionare tutti gli ProcessUser
che ha anche un ruolo di amministratore.
Tuttavia il mio JPQL non funziona perché il mio utente ha anche un ruolo ufficiale, quindi viene recuperato nell'elenco.
Ecco la JPQL:
entityManager.createQuery("SELECT p FROM " + ProcessUser.class.getName()
+ " p join p.roles role WHERE role.name NOT IN ('sysadmin')").getResultList();
L'SQL generato è:
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' ) )
Tu dici che si desidera includere un ruolo di ADMIN , ma il tuo esempio mostra ROLE NAME NOT IN SysAdmin. Puoi spiegare? –
@Shervin: devi stare attento con i tuoi tag; la maggior parte delle risposte qui sotto sono errate perché hai taggato la tua domanda come "SQL" (ora modificata in JPQL) – ChssPly76
No Non voglio includere admin (sysadmin). ProcessUser è un utente e un amministratore di sistema, quindi la mia selezione non mi ottiene quello che voglio. Voglio che l'utente sia ammesso se ha il ruolo sysadmin. –