1. 程式人生 > >Hibernate多對多級聯操作

Hibernate多對多級聯操作

save 秘書 標簽 role user 回顧 總經理 進行 oid

  表與表之間關系回顧(重點)

2 多對多

(1)訂單和商品關系,一個訂單裏面有多個商品,一個商品屬於多個訂單

(2)用戶和角色多對多關系

- 用戶: 小王、小馬、小宋

- 角色:總經理、秘書、司機、保安

** 比如小王 可以 是總經理,可以是司機

** 比如小宋 可以是司機,可以是秘書,可以保安

** 比如小馬 可以是 秘書,可以是總經理

- 一個用戶裏面可以有多個角色,一個角色裏面可以有多個用戶

(3)多對多建表:創建第三張表維護關系

Hibernate多對多操作

多對多映射配置

以用戶和角色為例演示

第一步 創建實體類,用戶和角色

第二步 讓兩個實體類之間互相表示

(1)一個用戶裏面表示所有角色,使用set集合

技術分享

(2)一個角色有多個用戶,使用set集合

技術分享

第三步 配置映射關系

(1)基本配置

(2)配置多對多關系

- 在用戶裏面表示所有角色,使用set標簽

技術分享

- 在角色裏面表示所有用戶,使用set標簽

技術分享

技術分享

第四步 在核心配置文件中引入映射文件

技術分享

測試:

技術分享

多對多級聯保存

根據用戶保存角色

第一步在用戶配置文件中set標簽進行配置,cascadesave-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多對多級聯操作