2016-06-30 41 views
0

在模型中有兩個表:人員,角色休眠HQL從子表到父表使用左連接

PersonRole java類建模N:M關係。它有兩個屬性@ManyToOne:
人的人,角色作用

我有一個HQL查詢檢索屬於一個角色的所有用戶:

select role.name, person.name from PersonRole pr join pr.person join pr.role 

需要一輪做其他方式:所有角色爲一個人。但是,如果一個人沒有的角色仍需要檢索的人(左連接)

select person.name, ro.le.name from PersonRole pr join pr.person join pr.role 

這不是主要的實體工作是PersonRole並返回只與角色的用戶。不知道如何從Person開始連接並在Person實體中沒有任何屬性引用角色時轉到可選角色。

最好的辦法是怎麼做的?

+0

檢查我更新的問題 –

回答

1

修訂ANSWER

試試這個:

把你Person類的屬性如下:

List<Role> lstRole; 

這樣,當你寫你的查詢:

SELECT P FROM Person P 

你會得到每個人都有一個關聯角色列表。

+0

最後應用非常類似的解決方案。創建新字段(列表 personRoles)用@OneToMany註釋,並可以在HQL中選擇person.name,role.name從Person人左連接person.personRoles proles左連接proles.role角色。看起來多餘,但似乎工作。 – kandan

+0

想要獲取查詢中的所有數據,因爲它是惰性加載的,並且有很多行,因此在每次迭代中獲取所有角色的速度會很慢。不能使用子查詢來獲取人員的所有角色對象,除非對角色表的每個字段使用聚合函數,而不是獲取角色對象的列表或對於該人員的每個角色具有多個行。 – kandan

+0

好的,祝你有美好的一天;) –