Sql 如何编写hql来获取所有没有权限的记录
我有三张桌子Sql 如何编写hql来获取所有没有权限的记录,sql,hibernate,hql,Sql,Hibernate,Hql,我有三张桌子 Project id, name ProjectAuthorization id, project_id, user_id , permission User id, name Project.java @OneToMany(mappedBy = "project", cascade = CascadeType.ALL) private List<ProjectAuthorization> permissions; 我想获得当前用户没有任何权限的
Project
id, name
ProjectAuthorization
id, project_id, user_id , permission
User
id, name
Project.java
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL)
private List<ProjectAuthorization> permissions;
我想获得当前用户没有任何权限的所有项目,如何通过hibernate查询编写它
更新
hql如下所示:
select p from Project as p left join p.permissions as pa where pa.user.id!=:userid and p.id not in (select pa2.project.id from ProjectAuthorization as pa2 where pa2.user.id=:userid)");
例如,可以使用以下查询(也是有效的JPQL,没有使用特定于Hibernate的构造):
SELECT p
FROM Project p
WHERE p.id NOT IN
(SELECT authorization.project.id
FROM ProjectAuthorization authorization
WHERE authorization.user = :currentUser)
这些表之间是否有关联映射?是的,project具有OneToMany权限,用户也具有OneToMany权限让我们查看它们之间的映射
select p from Project as p left join p.permissions as pa where pa.user.id!=:userid and p.id not in (select pa2.project.id from ProjectAuthorization as pa2 where pa2.user.id=:userid)");
SELECT p
FROM Project p
WHERE p.id NOT IN
(SELECT authorization.project.id
FROM ProjectAuthorization authorization
WHERE authorization.user = :currentUser)