2010-08-13 118 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 + "'")