Hibernate多對多級聯操作
表與表之間關系回顧(重點)
2 多對多
(1)訂單和商品關系,一個訂單裏面有多個商品,一個商品屬於多個訂單
(2)用戶和角色多對多關系
- 用戶: 小王、小馬、小宋
- 角色:總經理、秘書、司機、保安
** 比如小王 可以 是總經理,可以是司機
** 比如小宋 可以是司機,可以是秘書,可以保安
** 比如小馬 可以是 秘書,可以是總經理
- 一個用戶裏面可以有多個角色,一個角色裏面可以有多個用戶
(3)多對多建表:創建第三張表維護關系
Hibernate多對多操作
多對多映射配置
以用戶和角色為例演示
第一步 創建實體類,用戶和角色
第二步 讓兩個實體類之間互相表示 (1)一個用戶裏面表示所有角色,使用set集合
(2)一個角色有多個用戶,使用set集合
第三步 配置映射關系 (1)基本配置 (2)配置多對多關系 - 在用戶裏面表示所有角色,使用set標簽
- 在角色裏面表示所有用戶,使用set標簽
第四步 在核心配置文件中引入映射文件
測試:
|
多對多級聯保存
根據用戶保存角色
第一步在用戶配置文件中set標簽進行配置,cascade值save-update 第二步寫代碼實現 (1)創建用戶和角色對象,把角色放到用戶裏面,最終保存用戶就可以了 //演示多對多修級聯保存 @Test publicvoid testSave() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //開啟事務 tx = session.beginTransaction();
//添加兩個用戶,為每個用戶添加兩個角色 //1 創建對象 User user1 = new User(); user1.setUser_name("lucy"); user1.setUser_password("123");
User user2 = new User(); user2.setUser_name("mary"); user2.setUser_password("456");
Role r1 = new Role(); r1.setRole_name("總經理"); r1.setRole_memo("總經理");
Role r2 = new Role(); r2.setRole_name("秘書"); r2.setRole_memo("秘書");
Role r3 = new Role(); r3.setRole_name("保安"); r3.setRole_memo("保安");
//2 建立關系,把角色放到用戶裏面 // user1 -- r1/r2 user1.getSetRole().add(r1); user1.getSetRole().add(r2);
// user2 -- r2/r3 user2.getSetRole().add(r2); user2.getSetRole().add(r3);
//3 保存用戶 session.save(user1); session.save(user2);
//提交事務 tx.commit();
}catch(Exception e) { tx.rollback(); }finally { session.close(); //sessionFactory不需要關閉 sessionFactory.close(); } }
|
多對多級聯刪除(了解)
第一步 在set標簽進行配置,cascade值delete 第二步 刪除用戶
|
維護第三張表關系
1 用戶和角色多對多關系,維護關系通過第三張表維護
2 讓某個用戶有某個角色 第一步 根據id查詢用戶和角色
第二步 把角色放到用戶裏面 (1)把角色對象放到用戶set集合
3 讓某個用戶沒有某個角色 第一步 根據id查詢用戶和角色
第二步 從用戶裏面把角色去掉 (1)從set集合裏面把角色移除
|
Hibernate多對多級聯操作