将琴存诗
人生 可以不要那么 耀 ,只需要有 一个  平凡的梦想  足以 。—— loveincode -_^ RSS
Fork me on GitHub

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表中的信息。

posted @ 2016-08-31 10:29  loveincode  阅读(4374)  评论(0编辑  收藏  举报
最简单即最美
有了信仰,自己要坚持努力 2017.07.09 21:34