1. 程式人生 > >Hibernate 聯級刪除操作 java

Hibernate 聯級刪除操作 java

前體:兩個主體類是一對多的關係,都是主控方;

有兩張表kinds和user 是一對多的關係;

kinds表

user表

 

關係如下:

如果直接刪除kinds表裡面的資料的話,就會報以下錯誤,因為關聯的user表裡面數據沒有刪除;

hibernate預設的聯級刪除方法如下:

 第一種:預設的操作,刪除kinds表中的資料,然後把關聯的user表中的外來鍵列清空,但是不刪除資料

程式碼如下:

package cn.com.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Kinds;
import cn.com.util.Hibernate_Utils;

public class Demo8 {
@Test
public void demo(){
	/*author:命運的信徒
	 * date:2018/12/3
	 * aim:hibernate的聯級刪除
	 * 
	 */
	//1.建立連線
	Session session=Hibernate_Utils.openSession();
	//2.開啟事務
	Transaction tx=session.beginTransaction();
	//3.資料庫操作
	//疑問:ll是什麼?是這個類的主鍵
	Kinds kk=session.get(Kinds.class, "會計");//這是session的一個方法,通過這個類的主鍵id來得到一個物件	
	session.delete(kk);
	tx.commit();
}
}

 

結果如下:

 

 

第二種:刪除kinds表中的資料,然後把關聯的user表中的外來鍵列清空,而且刪除資料

對映檔案設定:cascade="delete,save-update"

 

程式碼如下:

package cn.com.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Kinds;
import cn.com.util.Hibernate_Utils;

public class Demo8 {
@Test
public void demo(){
	/*author:命運的信徒
	 * date:2018/12/3
	 * aim:hibernate的聯級刪除
	 * 
	 */
	//1.建立連線
	Session session=Hibernate_Utils.openSession();
	//2.開啟事務
	Transaction tx=session.beginTransaction();
	//3.資料庫操作
	//疑問:ll是什麼?是這個類的主鍵
	Kinds kk=session.get(Kinds.class, "會計");//這是session的一個方法,通過這個類的主鍵id來得到一個物件	
	session.delete(kk);
	tx.commit();
}
}