关于Hibernate中如果一个实体类是 Set,怎么去查询数据

今天在工作中碰到了一个问题
一个 实体类 User 关联了一个 权限表 Role

User 表 是这样的

public class User
    private String userName; // 用户名
    private String nickName; // 昵称
    private String trueName; // 真实姓名
    @ManyToMany(targetEntity = Role.class, fetch = FetchType.LAZY)
    @JoinTable(name = Globals.DEFAULT_TABLE_SUFFIX + "user_role", joinColumns = {
            @javax.persistence.JoinColumn(name = "user_id") }, inverseJoinColumns = {
                    @javax.persistence.JoinColumn(name = "role_id") })
    private Set<Role> roles = new TreeSet();
public class Role 
        private String roleName;        // 角色名称
        private String roleCode;        // 角色编码,根据该编码来识别角色

但是,我想查询的 某个权限,那些用户在使用,本来很简单的一个sql 语句可以解决的,但是使用了@JoinTable 导致了没有关联的实体类,去查询。

怎么解决了

"select u from User u join u.roles r where r.id="+roleId

(Set)和(List)都可以取集合中的元素,但用在where子句的条件是需要数据库支持子查询。
所以使用关联 查询,我们就可以查询出来了。
u.roles r 中的 r 意思就是 role 这个对象的别名,hibernate会翻译成两个表的内连接关系


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java小小星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值