Tôi có một câu lệnh SQL khá đơn giản mà tôi cần phải thực hiện.JPQL, Cách KHÔNG chọn một cái gì đó
Tôi có một số ProcessUser
, Role
và một bảng ProcessUserRole
. Một số nhiều người chuyển tiếp thẳng đứng
Tôi muốn chọn tất cả ProcessUser
cũng có vai trò là quản trị viên.
Tuy nhiên, JPQL của tôi không thành công vì người dùng của tôi cũng có nhân viên vai trò, vì vậy nó được truy lục trong danh sách.
Đây là JPQL:
entityManager.createQuery("SELECT p FROM " + ProcessUser.class.getName()
+ " p join p.roles role WHERE role.name NOT IN ('sysadmin')").getResultList();
SQL được tạo ra là:
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' ) )
Bạn nói rằng bạn muốn bao gồm một Vai trò của ADMIN , nhưng mẫu của bạn hiển thị ROLE NAME NOT IN SysAdmin. Bạn có thể giải thích? –
@Shervin - bạn cần phải cẩn thận với các thẻ của mình; phần lớn các câu trả lời bên dưới là không chính xác vì bạn đã gắn thẻ câu hỏi của mình là "SQL" (giờ đã thay đổi thành JPQL) – ChssPly76
Không, tôi không muốn bao gồm quản trị viên (sysadmin). ProcessUser là một người dùng, và một sysadmin, do đó lựa chọn của tôi không nhận được những gì tôi muốn. Tôi muốn người dùng được ommited nếu có vai trò sysadmin. –