HQL:使用ManyToMany进行Hibernate查询

我有一个关于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 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 getPortailusers() { return this.portailusers; } 

此映射创建了第3个表(PORTAIL_USERROLE),其中存储了关系。 一切都很好。 当我有用户时,我会检索角色。

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

这应该这样做:

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

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