Hibernate 联级删除操作 java

版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/84750536

前体:两个主体类是一对多的关系,都是主控方;

有两张表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();
}
}

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/84750536