Tengo un SQL bastante simple que necesito realizar.JPQL, Cómo NO seleccionar algo
Tengo un ProcessUser
, Role
y un ProcessUserRole
mesa. Un straight forward many-to-many
Quiero seleccionar todos los ProcessUser
que también tienen un rol de administrador.
Sin embargo, mi JPQL falla porque mi usuario también tiene un agente de función, por lo que se recupera en la lista.
Aquí es el JPQL:
entityManager.createQuery("SELECT p FROM " + ProcessUser.class.getName()
+ " p join p.roles role WHERE role.name NOT IN ('sysadmin')").getResultList();
El SQL generado es:
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' ) )
usted dice que quiere incluir un papel de ADMIN , pero su muestra muestra ROLE NAME NOT IN SysAdmin. ¿Puedes explicar? –
@Shervin - debe tener cuidado con sus etiquetas; la mayoría de las respuestas a continuación son incorrectas porque ha etiquetado su pregunta como "SQL" (ahora cambiado a JPQL) – ChssPly76
No, no quiero incluir admin (sysadmin). ProcessUser es un usuario y un administrador del sistema, por lo tanto, mi selección no me da lo que quiero. Quiero que el usuario sea omitido si tiene el rol sysadmin. –