hibernate多對多級聯儲存、級聯刪除
阿新 • • 發佈:2019-01-03
多對多對映配置
- 建立實體類,人和身份
- 讓兩個實體類 之間互相表示
- 一個人裡面表示所有的身份,使用set集合
- 一個身份對應很多人
- 配置對映檔案
- 基本配置
- 配置多對多關係
- 人實體類對映配置檔案
- 身份實體類對映配置檔案
- 配置核心配置檔案,將對映配置檔案引入 到核心配置檔案中
- 執行工具類測試,成功建立了三張表格
多對多級聯儲存
- 第一步:在一端配置檔案,這裡使用人實體類對映配置檔案中的set標籤進行配置,cascade 屬性值改為save-update
第二步:寫程式碼實現
建立人和身份物件,將身份儲存到人裡,最終儲存人就可以了,只需要操作一端
@Test public void add
資料庫結果:
- person人表:
- position身份表:
- p_p第三張表:
多對多級聯刪除
- 第一步:在一端配置檔案,這裡使用人實體類對映配置檔案中的set標籤進行配置,cascade 屬性值改為delete
程式碼中,查詢出配置的一端要刪除的,然後進行刪除方法
@Test public void delete() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 開啟事務 transaction = session.beginTransaction(); // 查詢出要刪除的person表格的內容 Person person = session.get(Person.class, 3); // 執行Session的刪除方法 session.delete(person); // 提交事務 transaction.commit(); } catch (Exception e) { // 如果發生異常,回滾 transaction.rollback(); }finally { // 關閉資源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
- 資料庫結果:
- person 表格:
- postion身份表格:
- p_p表格:
- ==注意:==
- 多對多的關係是靠第三表來維護的,所以不建議執行級聯刪除操作,可以直接修改第三表實現
多對多中維護第三張表
- ==多對多的關係靠第三張表來維護==
給某個人新增身份
- 查詢處要新增的身份,和被新增的人
將查詢出的身份新增到人的set集合中
@Test public void update() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 開啟事務 transaction = session.beginTransaction(); // 查詢出要新增的人 Person person = session.get(Person.class, 2); // 查詢出給人新增的身份 Position position = session.get(Position.class, 1); // 新增方法 person.getSet().add(position); // 持久態自動跟新資料庫,不需要手動呼叫方法 // 提交事務 transaction.commit(); } catch (Exception e) { // 如果發生異常,回滾 transaction.rollback(); }finally { // 關閉資源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
- 資料庫結果:成功給2號人,添加了1號身份
給某個人移除某個身份
@Test public void remove() { SessionFactory factory = null; Session session = null; Transaction transaction = null; try { factory = HibernateUtils.getSessionFatory(); session = factory.openSession(); // 開啟事務 transaction = session.beginTransaction(); // 查詢出要新增的人 Person person = session.get(Person.class, 2); // 查詢出給人新增的身份 Position position = session.get(Position.class, 1); // 移除查詢的身份 person.getSet().remove(position); // 持久態自動跟新資料庫,不需要手動呼叫方法 // 提交事務 transaction.commit(); } catch (Exception e) { // 如果發生異常,回滾 transaction.rollback(); }finally { // 關閉資源 if(session != null) { session.close(); } if(factory != null) { factory.close(); } } }
- 資料庫結果:成功移除2號人中 的1號身份