HQL:使用ManyToMany的Hibernate查询

j9per5c4  于 2023-03-30  发布在  其他
关注(0)|答案(3)|浏览(171)

我有一个关于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;
}

这个Map创建了第三个表(PORTAIL_USERROLE),其中存放了关系。所有工作都很好。当我有一个用户时,我检索角色。
但我的问题是在一个HQL查询中,我怎样才能得到所有具有特定角色的用户?任何类都表示PORTAIL_USERROLE表,所以我不知道如何进行我的HQL查询。

bakd9h0s

bakd9h0s1#

这应该可以做到:

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

olqngx592#

你可以使用@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 + "'")
l7wslrjt

l7wslrjt3#

您可以将这些功能用于一个或多个@MoneyToMany相关实体

List<User> findUsersByRoles_RoleIdIn(List<Integer> roles);

List<User> findUserByRoles_RoleIdInAndHoldings_HoldingId(List<Integer> roles, Integer holding);

相关问题