繁体   English   中英

像多对多集合中的查询一样休眠

[英]Hibernate like query on Many-to-Many collection

我有映射到user_roles User实体。 我想根据User.idroles.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查询? 如何将参数传递给角色名称?

User.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;
    }
}

希望对你有帮助

select "your_req" from User us join usr.role usr where usr.name like '%admin%' and us.id=1

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM