HQL:使用 ManyToMany 进行休眠查询

2022-09-03 00:35:37

我有一个关于HQL查询和休眠的问题。

我有一个用户类和一个角色类。一个用户可以有多个角色。所以我有一个像这样的ManyToMany关系:

在用户类中:

@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查询。


答案 1

这应该这样做:

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

答案 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 + "'")

推荐