zoukankan      html  css  js  c++  java
  • Hibernate 中Hql 查询中间表的用法

    案例简述:

      项目中存在User 用户表 和 Role 角色表

      它们之间是多对多的关系

      

      在User类定义中 使用hibernate注解 

    //角色列表
        @ManyToMany(targetEntity = Role.class,fetch = FetchType.EAGER)
        @JoinTable(name="sys_user_role" ,
                   joinColumns = {@JoinColumn(name = "user_id",referencedColumnName="id")},
                   inverseJoinColumns = {@JoinColumn(name="role_id",referencedColumnName="id")})
        @Expose
        private Set<Role> roles = new HashSet<Role>();

      在Role类中定义中如下

    //角色对应的用户 n:n
       @ManyToMany(targetEntity = User.class,fetch = FetchType.EAGER, mappedBy = "roles")
       private Set<User> users = new HashSet<User>();

      数据库会自动生成sys_user_role表,但是这个是没有实体类的

      

      所以在HQL面向对象的查询中是不能直接查找中间表的

      

      正确的查询关联方法:

      

      String sql1 = "SELECT  r.code FROM Role r left join r.users u where u.id = ?";      
      Query query1
    = sessionFactory.getCurrentSession().createQuery(sql1); query1.setInteger(0,UserId);

      这个通过这样

      SELECT r.code FROM Role r left join r.users u where u.id = ?

      Role 实体与user实体间的关联就可以通过user的信息查到role表中的信息。

  • 相关阅读:
    yum命令速查
    5分钟理解编译系统
    Nginx(一)安装及启停
    Linux时间命令
    常用七种排序的python实现
    python迭代器、生成器、装饰器
    LeetCode【第217题】Contains Duplicate
    LeetCode【第1题】Two Sum
    python【第二十篇】Django表的多对多、Ajax
    不要问我DO在哪里?
  • 原文地址:https://www.cnblogs.com/loveincode/p/5824910.html
Copyright © 2011-2022 走看看