--一個用戶可以擔任多個角色,如user1既是調度員又是分揀員
--一個角色可以被多個用戶擔任,如user1是調度員,user2也是調度員
--用戶和角色之間的對應關系為多對多,所以會產生中間表 t_user_role
--所以查詢用戶對應的角色列表就需要通過中間表作為兩張表的連接完成查詢,以下分別給出sql查詢方式和hql查詢方式
--sql查詢方式,需要查詢三張表,角色表---用戶_角色表---用戶表
select u.c_id 用戶編號,
u.c_username 用戶名,
r.c_id 角色編號,
r.c_name 角色名,
r.c_description 角色描述
from t_role r
inner join t_user_role ur on r.c_id = ur.c_role_id
inner join t_user u on u.c_id = ur.c_user_id
where u.c_id = 382
--hql查詢方式,直接根據實體類之間的關系查詢(fetch表示迫切連接,返回的集合是List<Role>,不加fetch返回的是List<Object[]>)
--因為role實體類中是有user的一個set集合Set<User> users,所以返回List<Role>也可以通過每個role獲取到里面的user對象
--當然List<Object[]> 中有也保存了完整的信息,object[0]是role對象,object[1]是user對象
from Role r inner join fetch r.users u where u.id=?
--加fetch返回的數據
--不加fetch返回的數據