HQL:带有ManyToMany的Hibernate查询

17

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

我有一个用户类和一个角色类。一个用户可以拥有多个角色。所以我有一个像这样的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;
}

这个映射创建了一个第三张表(PORTAIL_USERROLE),关系储存在其中。这样使用起来都很顺利。当我有一个用户时,我检索角色。

但是我的问题是,在HQL查询中,如何获取所有具有特定角色的用户?没有任何类代表PORTAIL_USERROLE表,所以我不知道如何编写HQL查询。


5
当Pascal Thivent编辑这个问题时,他将JoinTable更改为oinTable,并取消了一个完全有效的句子的大写,然后从结尾删除了“谢谢”。这样做有什么意义呢?它使问题变得更难阅读了。 - default_avatar
3个回答

34
这样应该可以:
from Portailuser u join u.portailroles r where r.name=:roleName

非常感谢。我没想到Hibernate会像这样管理ManyToMany。 - Kiva

2
您可以像这样使用@WhereJoinTable:

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

0

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接