版权声明:博客知识产权来源命运的信徒,切勿侵权 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();
}
}