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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM