2013-06-01 182 views
0

現在我試圖實現一個像過濾器這樣的函數。有兩種模型用戶和角色。我使用了單向的多對多關係。以下是我的代碼。如何在另一個集合中獲取具有此集合的集合和一個元素的實體

public class User { 
     ... 
     @ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
     @JoinTable(name = "user_role", joinColumns = {@JoinColumn(name="user_id") }, 
     inverseJoinColumns = { @JoinColumn(name = "role_id") }) 
     private Set<Role> roles = new HashSet<Role>(); 
     ... 
    } 

    public class Role { 
     private String role; 
     ... 
    } 

現在我想要獲取具有許多角色但恰好只是角色集合中用戶角色之一的用戶,該用戶被挑選出來。我想使用HQL來查詢,但我不怎麼寫,所以我寫了一個sql「select * from user」,因爲你在u.id = ur.user_id中加入了user_role作爲你的ur.user_id 其中的ur.role_id在(1,2) 」。但結果無法轉換爲用戶列表。而且我仍然需要使用HQL,所以任何人都可以提供一些幫助。謝謝。

回答

0

您的SQL查詢的翻譯是

select u from User u join u.roles role 
where role.id in (1,2) 

the documentation瞭解HQL和連接。

+0

非常感謝!根據你的建議,我已經完成了這個工作:「從用戶u中選擇不同的u加入與(2,3)中的role.id相關的u.roles角色」 – aldrich

相關問題