Hibernate的學習之路二十二(一對多的級聯刪除)
阿新 • • 發佈:2019-01-06
前言
這篇主要說明了級聯刪除,比較繁瑣需要舉例子說明
程式碼
技術分析之級聯刪除
1. 先來給大家在資料庫中演示含有外來鍵的刪除客戶功能,那麼SQL語句是會報出錯誤的
* 例如:delete from customers where cid = 1;
2. 如果使用Hibernate框架直接刪除客戶的時候,測試發現是可以刪除的(這裡需要配置級聯刪除,如果不配置也是報錯的)
3. 上述的刪除是普通的刪除,那麼也可以使用級聯刪除,注意:級聯刪除也是有方向性的!!
* <many-to-one cascade="delete" />
現在舉個例子
A 是一 B C是多。
以下是沒有配置delete欄位。刪除的結果是A刪除了,B和C裡的外來鍵都修改成null。
/** * 測試:刪除客戶,客戶下有2個聯絡人 */ @Test public void run6(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 先查詢1號客戶 Customer c1 = session.get(Customer.class, 1L); session.delete(c1); tr.commit(); }
以下是設定了A(一)的delete。結果是A刪除了,B和C刪除了
/** * 測試級聯刪除,刪除客戶,級聯刪除客戶下的聯絡人 */ @Test public void run7(){ Session session = HibernateUtils.getCurrentSession(); Transaction tr = session.beginTransaction(); // 先查詢1號客戶 Customer c1 = session.get(Customer.class, 1L); session.delete(c1); tr.commit(); }
以下是設定了B(多)的delete。結果是A刪除了,B刪除了, A的外來鍵修改成null。
@Test
public void run8(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Linkman man = session.get(Linkman.class, 1L);
session.delete(man);
tr.commit();
}
以下是一和多都設定了delete,結果是A和B和C都刪除了。
/**
* 測試級聯刪除
*/
@Test
public void run9(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Linkman man = session.get(Linkman.class, 1L);
session.delete(man);
tr.commit();
}
其他
在企業中,對刪除是非常重視的,不要隨意刪除,有些只是在資料庫中多添加了一個欄位,來判斷使用者那邊是否刪除了這個資料。
留著資料可以進行分析,或者有功能是回收站功能,可以還原的功能。