案例簡述:
項目中存在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表中的信息。