《深入浅出Hibernate》读书笔记4——脏数据

本文解释了脏数据的概念及其在Hibernate中的处理方式。通过实例展示了如何在修改对象属性后形成脏数据,以及Hibernate如何采用数据版本比对策略来检查并更新这些变化。

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

脏数据不是废弃或无用的数据,而是指一个数据对象所携带的信息发生了改变之后的状态。

Transaction tx = session.beginTransaction();
TUser user 
= (TUser)session.load(TUser.class,new Integer(1));
user.setAge(
30);
//此时user 变成脏数据
tx.commit();

脏数据检查的策略有两种:

1、数据对象监控:就是采取拦截器

2、数据版本比对:数据提交的时候将提交数据与之前版本比对

Hibernate 采取的是第二种检查策略。

 


hibernate 判断一个对象是否需要保存的原理:利用属性的 unsaved-value,比如 id 还没填入数据库之前的 unsaved-value 为 null

例子:

我们加载了一个 user 对象,同事也加载了它的 addresses 属性,里面有3个address对象,然后你加了一个address对象,新增加的 address 对象的 id 值跟我们设定的 unsaved-value(null) 相同,hibernate 视其为未保存,并生成 insert 执行

疑问:如果原有对象改变,这样 id 是有的,是不是hibernate 就不进行保存呢?

回答:上面讨论的保存实际上是 insert ,update 大家不用关心,事物提交的时候 hibernate 会自动遍历找出变化的地方,并 update 的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值