Mam dość prosty SQL, który muszę wykonać.JPQL, Jak NIE wybrać czegoś
Mam tabelę ProcessUser
, Role
i ProcessUserRole
. Prostoliniowy wiele-do-wielu
Chcę wybrać wszystkie ProcessUser
, które również mają rolę administratora.
Jednak mój JPQL nie działa, ponieważ mój użytkownik ma również funkcję oficera ról, więc jest pobierany na liście.
Oto JPQL:
entityManager.createQuery("SELECT p FROM " + ProcessUser.class.getName()
+ " p join p.roles role WHERE role.name NOT IN ('sysadmin')").getResultList();
Wygenerowany SQL to:
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' ) )
Mówisz, że chcesz dołączyć roli ADMIN , ale twój przykład pokazuje ROLE NAME NOT IN SysAdmin. Możesz wytłumaczyć? –
@Shervin - musisz zachować ostrożność przy tagach; większość poniższych odpowiedzi jest niepoprawna, ponieważ oznaczyłeś swoje pytanie jako "SQL" (teraz zmienione na JPQL) – ChssPly76
Nie Nie chcę dołączać administratora (sysadmin). ProcessUser jest użytkownikiem i sysadminem, więc mój wybór nie zapewnia mi tego, czego chcę. Chcę, aby użytkownik został pominięty, jeśli ma rolę sysadmin. –