HQL: Hibernate запрос с ManyToMany - PullRequest
       35

HQL: Hibernate запрос с ManyToMany

13 голосов
/ 13 августа 2010

У меня вопрос с 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;
}

Это отображение создало 3-ю таблицу (PORTAIL_USERROLE) где хранятся отношения.Все работает нормально, как это.Когда у меня есть пользователь, я получаю роли.

Но мой вопрос таков: в запросе HQL, как я могу получить всех пользователей с определенной ролью?Любой класс представляет таблицу PORTAIL_USERROLE, поэтому я не знаю, как сделать мой HQL-запрос.

Ответы [ 2 ]

21 голосов
/ 13 августа 2010

Это должно сделать это:

from Portailuser u join u.portailroles r where r.name=:roleName
2 голосов
/ 05 мая 2017

вы можете использовать @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 + "'")
...