2010-08-13 192 views
10

我對HQL查詢和休眠有疑問。HQL:使用ManyToMany進行休眠查詢

我有一個用戶類和一個角色類。用戶可以有許多角色。所以我有一個多對多relatation這樣的:

在用戶等級:

@ManyToMany(fetch = FetchType.LAZY) 
@oinTable(name = "PORTAIL_USERROLE", joinColumns = { @JoinColumn(name = "USERID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "ROLE", nullable = false, updatable = false) }) 
public Set<Portailrole> getPortailroles() { 
    return this.portailroles; 
} 

在角色類:

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "PORTAIL_USERROLE", joinColumns = { @JoinColumn(name = "ROLE", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "USERID", nullable = false, updatable = false) }) 
public Set<Portailuser> getPortailusers() { 
    return this.portailusers; 
} 

這種映射創造了其中的關係放養第3臺(PORTAIL_USERROLE)。 所有這些工作都很好。當我有用戶時,我檢索角色。

但是,我的問題是:在HQL查詢中,如何獲取所有具有特定角色的用戶?任何類代表PORTAIL_USERROLE表,所以我不知道如何使我的HQL查詢。

+3

當帕斯卡爾Thivent編輯這個問題,他改變JoinTable到oinTable和聯合國資本完全有效的句子然後從最後刪除「謝謝」。嚴重到了什麼地步,它使問題變得不可讀? – 2013-10-16 16:15:41

回答

18

這應做到:

from Portailuser u join u.portailroles r where r.name=:roleName 
+0

非常感謝。我不認爲hibernate像這樣管理manyToMany。 – Kiva 2010-08-13 09:06:52

+0

那只是linq不是嗎? – Gage 2010-08-13 12:05:19

+0

謝謝這也幫助我 – 2017-03-24 14:10:36

2

可以使用 @WhereJoinTable 像這樣:

@JoinTable(name = "OFFICE_USER_POSITION", joinColumns = { 
     @JoinColumn(name = "user_id", referencedColumnName = "id")}, inverseJoinColumns = { 
     @JoinColumn(name = "POST_ID", referencedColumnName = "id")}) 
@WhereJoinTable(clause = "primary_flag='" + YES + "' and del_flag='" + DEL_FLAG_NORMAL + "'")