hibernate(4)cascade和inverse(hibernate的级联与关系维护)

本文深入解析了ORM框架中cascade与inverse属性的作用及配置方法。cascade参数用于定义对象状态变化时,如何同步更新关联对象的状态,如save-update、delete、delete-orphan等;inverse属性则决定了关系维护的方向,通常与cascade配合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、cascade(级联)

cascade参数:

save-update:A保存,同时保存B

delete:删除A,同时删除B,AB都不存在

delete-orphan:孤儿删除,解除关系,同时将B删除,A存在的

all : save-update 和 delete 整合

all-delete-orphan : 三个整合

如果需要配置多项,使用逗号分隔。<set cascade="save-update,delete">

 

其他都很好理解,这里着重解释一下孤儿删除

孤儿删除只存在于一对多的环境,当解除关系的时候,将此条记录删除

@Test

public void demo06(){

// 6 查询客户,并查询订单,解除客户和订单订单的关系

// * 默认:客户和订单解除关系后,外键被设置成null,此时订单就是孤儿。客户和订单都存在。

// * 孤儿删除(孤子删除),当订单称为孤儿,一并删除。客户仍存在。

Session session = factory.openSession();

session.beginTransaction();

 

//1 查询客户

Customer customer = (Customer) session.get(Customer.class, 9);

 

//2查询订单

Order order = (Order) session.get(Order.class, 8);

 

//3 解除关系

customer.getOrderSet().remove(order);

 

session.getTransaction().commit();

session.close();

}

Ps:主表不能删除,从表已经引用(关联)的数据

        从表不能添加,主表不存在的数据。

 

二、inverse

        inverse为布尔值,并且inverse的默认值是true,作用是维护级联关系,也就是说由true的这方来设置外键。所以上面cascade是由inverse决定的,只有你inverse设置为true,你所设置的级联关系才能生效。如果不设置inverse,默认由一对多中的多去进行维护。

 

总结:也就是说inverse和cascade通常是一起使用,inverse是决定由哪一方进行维护,cascade是决定维护的方法(也就是如何去维护)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值