JPQL, como NO seleccionar algo

Tengo un SQL bastante simple que necesito realizar.

tengo unProcessUser, Role y unProcessUserRole mesa. Un directo muchos-a-muchos

Quiero seleccionar todoProcessUserEs que también tiene un rol de administrador.

Sin embargo, mi JPQL falla porque mi usuario también tiene un rol de oficial, por lo que se recupera en la lista.

Aquí está 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'
            )
        )

Respuestas a la pregunta(5)

Su respuesta a la pregunta