Hibernate как запрос в коллекции Many-to-Many

У меня есть Userentity, которая сопоставлена ​​с user_roles. Я хочу отфильтровать эти роли на основе User.idи roles.name

То же, что и этот SQL-запрос

SELECT ur 
FROM user 
     JOIN user_roles ur 
          ON ur.user_id = user.id 
WHERE user.id = 1 
  AND ur.name like '%admin%';

Как выполнить этот SQL-запрос в спящем режиме? Как передать параметр имени роли?

Пользователь.java

@Entity
class User {
    @ManyToMany
    @JoinTable(name="user_roles",
        joinColumns=@JoinColumn(
            name="user_id", referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(
            name="role_id", referencedColumnName="id")
        )
    public Set<Role> getRoles() {
        return roles;
    }
}

person Achaius    schedule 20.11.2013    source источник


Ответы (2)


Надеюсь, это поможет

select "your_req" from User us join usr.role usr where usr.name like '%admin%' and us.id=1
person Suganthan Madhavan Pillai    schedule 20.11.2013
comment
Я хочу передать user.id и ur.name в качестве параметров - person Achaius; 20.11.2013
comment
да, очевидно, вы можете передать это в предложение where запроса - person Suganthan Madhavan Pillai; 20.11.2013

HQL поддерживает именно то, что вы хотите, вы можете создать HQL-запрос, а затем передать ему параметры. Следующий блок кода может быть ссылкой:

Long userId = 1L;
String roleNamePattern = "%admin%";

Query query = session.createQuery("SELECT role FROM User user JOIN user.roles role WHERE user.id = :userid AND role.name LIKE :rolename");
query.setLong("userid", userId);
query.setString("rolename", roleNamePattern);
List<Role> roles = query.list();
person thanhnguyen    schedule 20.11.2013