2013-02-04 20 views
-1

我有三個表如何寫一個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; 

User.java

@OneToMany(mappedBy = "user",cascade =CascadeType.ALL) 
private List<ProjectAuthorization> permissions; 

ProjectAuthorization.java

@ManyToOne() 
private Project project; 
@ManyToOne() 
private User user; 

我想獲得所有的項目,沒有任何權限的當前用戶,如何通過休眠查詢寫它?

更新

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)"); 
+0

你這些表之間有任何關聯映射? –

+0

是的,項目有OneToMany權限,用戶也有OneToMany權限 – atu0830

+0

讓我們看看他們的映射 –

回答

0

例如下面的查詢(也有效JPQL,在使用中沒有Hibernate的具體結構)可用於:

SELECT p 
FROM Project p 
WHERE p.id NOT IN 
    (SELECT authorization.project.id 
    FROM ProjectAuthorization authorization 
    WHERE authorization.user = :currentUser) 
相關問題