hibernate之脏数据检查

HIbernate中有个名词---脏数据(dirty Data)检查!

其中“脏”并不是废弃,无用的数据,而是一个数据对象的信息发生改变之后的状态;

当我们从数据库中读取一个user对象;

例如:

		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		//session将user对象读取出来
		TUser user = (TUser) session.load(TUser.class, new Integer(1));
		//当user对象的属性发生改变时,我们称之为“脏数据”
		user.setAge(new Integer(32));
		session.getTransaction().commit();

 当事务提交时,Hibernate会对session中的PO进行检测,判断是那些属性发生了变化,并将发生变化的数据更新到数据库中;

 

但是其中hibernate如何识别该对象被修改了(脏数据检查是如何进行的?)?

脏数据的检测的策略一般分为两种:

  • 数据对象监控

数据对象监控的方式,大体上是通过拦截器对数据对象的设值方法(setter)进行拦截;拦截器的实现可以借助Dynamic Proxy或者CGlib实现,一旦该对象的setter方法被调用,就将其标记为“待更新”,之后在数据库的操作时将其更新到对应的库表中;

  • 数据版本比对

在持久层框架中维持数据对象的最近读取版本,当数据提交时将提交数据与此版本对比,如果其发生变化则将其同步到数据库相对应的库表中;

 

HIbernate采取的是:数据版本比对 ;

结合下实例:

		TUser user = (TUser) session.load(TUser.class, new Integer(1));
                session.beginTransaction();
		user.setAge(new Integer(32));
		session.getTransaction().commit();

1,加载id为1的user对象;

TUser user = (TUser) session.load(TUser.class, new Integer(1)); 

 假设此时数据库中id为1的user对象的age属性为20;

2,开启事务:

session.beginTransaction();

3,调用user的设置方法,将其age属性修改为“32”;

user.setAge(new Integer(32));

 4,事务提交;

session.getTransaction().commit();

 当session调用commit()时,会随即调用session.flush()方法,在flush方法中会刷新所有数据,执行SQL完成的动作;

告别重启烦恼:用WSL2让Docker和VMware在Win10上真正共存 本文详细介绍了如何在Windows 10系统上,借助WSL2实现Docker与VMware的真正共存,彻底告别以往需要反复重启切换的烦恼。通过启用Hyper-V兼容模式并进行正确配置,开发者无需重启即可同时高效运行容器和虚拟机,显著提升开发与测试工作流的连续性和效率。 阅读详情

相关推荐

从D3 00到FF FF:手把手解析RTCM3.2协议帧结构(附Python解析代码)

本文深入解析RTCM3.2协议帧结构,从同步头标识到CRC校验算法,详细讲解如何通过Python代码实现二进制数据解析。文章包含完整的RTCM3.2解析器实现,涵盖消息类型解码、CRC校验等关键步骤,并附赠特定消息类型(如1005型基准站坐标)的解析示例,帮助开发者快速掌握GNSS差分数据传输协议的核心技术。

weixin_42550052的博客 353

Hibernate 脏数据检查

  脏数据检查:   什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。我们看下面的代码: Transaction tx=session.beginTransaction(); User user=(User)session.load(User.class,”1”);//从数据库中加载符合条件的数据 user.setName(“zx”);//改变了user

javacoffe的专栏 8581

手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)

本文详细介绍了如何使用FT_PROG工具修改miniwiggler配置信息,解决UDE连接问题。通过分析FT2232芯片的EEPROM结构,提供从驱动安装到配置烧写的完整流程,帮助开发者实现无缝连接英飞凌TriBoard开发板。文章还包含常见错误解决方案和高级批量配置技巧。

weixin_30919429的博客 374

Hibernate脏数据

今天在使用hibernate向数据库中提交一份更新或者插入的时候,表面上是成功的执行了,而且刷新数据库也看见了数据元组中的项确实是改变了,但是当刷新Web页面使后台逻辑重新加载的时候,会时不时的发现bean的状态是外改动的状态,用统计学的方法统计了一下,正常与不正常的几率五五开。

wang805447391的博客 1356

共模电感在EMI滤波中的实战应用与设计技巧

本文深入探讨了共模电感在EMI滤波中的关键作用与设计技巧,涵盖电感值选择、饱和电流风险、磁芯材料性能及绕组工艺等实战经验。通过具体案例解析,展示了共模电感在开关电源、高速接口及汽车电子中的高效应用,帮助工程师解决电磁兼容问题并提升信号完整性。

weixin_27051161的博客 417

从安装到出图:一份给振动测试新手的LMS Test.Lab 2021完整避坑手册(含许可证更新和常见弹窗解决)

本文为振动测试新手提供LMS Test.Lab 2021的完整使用指南,涵盖安装配置、许可证更新、数据采集到频域后处理的全流程。特别针对常见弹窗错误提供解决方案,并详细讲解Colormap时频图分析技巧,帮助用户快速掌握振动数据分析核心技能。

weixin_29268331的博客 983

Hibernate一级缓存以及脏数据问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34319999的博客 640

Xilinx XDMA IP核配置实战:AXI Memory Mapped vs Stream选型指南(附PCIe调试技巧)

本文深入解析Xilinx XDMA IP核配置中AXI Memory Mapped与AXI Stream两种DMA接口的核心区别与选型策略。针对PCIe高速数据传输场景,详细对比了二者在数据特性、延迟、硬件资源及软件复杂度上的差异,为FPGA工程师在数据采集、实时处理等项目中做出高效设计决策提供实战指南,并附有关键的PCIe调试技巧。

qsc901234的博客 585

Hibernate 脏数据(session.isDirty())

Hibernate 脏数据(session.isDirty())         持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Transaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏(dirty)对象。 ...

看看我都干了些啥! 525

树莓派驱动DLPDLCR230NPEVM+framebuffer显示图片

DLPDLCR230NPEVM DLP® LightCrafter™ Display 230NP 是一个易于使用的紧凑型即插即用评估平台,适用于消费类产品、工业、医疗和物联网 (IoT) 市场中的各种超便携显示应用。此评估模块 (EVM) 采用 DLP230NP 芯片组,该芯片组由DLP230NP.23 1080p DMD、DLPC3436显示控制器和DLPA2005PMIC/LED 驱动器组成。此 EVM 外形小巧,配备生产就绪型光学引擎以及支持 18 位 RGB 并行视频接口...

L_Y000的博客 2618

【车辆仿真】从0开始建立dSPACE RT Simulink工程:CAN通信(RTICANMM方法)

【工程环境信息】:本文基于链接文章搭建SCALEXIO Rack RTPC总线节点,用于与AutoBox通信硬件:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):AutoBox (DS1006)板卡:DS6342软件:本文所使用的DBC链接提示:以下是本篇文章正文内容,下面案例可供参考!!!的部分一定记得配置,其他的按需配置RTICANMM的灵活度非常高,尽可能参考Help文档,理解相应的配置内容官方有RTICANMM的样例工程,在下方路径。

winnizap的博客 2381

hibernate 脏数据检查 dirtyCheck

在对hibernate中的关联表进行数据更新时 会对数据机型脏数据检查  该操作的主要方法:dirtyCheck 该位于org.hibernate.event.def.DefaultFlushEntityEventListener  protected void dirtyCheck(FlushEntityEvent event) throws HibernateExcep

天下无双 3643

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

Hibernate如何检查脏数据

什么是脏数据?   脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。看下面的代码:  Transaction tx=session.beginTransaction();  User user=(User)session.load(User.class,”1”);//从数据库中加载符合条件的数据  user.setName(“zx”);//改变了user对象的姓名属性,此时use

zy13540326801的专栏 1020

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hibernate脏数据检查

<br />转自:http://hi.baidu.com/ekou/blog/item/3bc89a8053a06dd29023d930.html脏数据检查:   什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。我们看下面的代码:Transaction tx=session.beginTransaction();User user=(User)session.load(User.class,”1”);//从数据库中加载符合条件的数据user.setName(“zx”);//改变了us

FG2006的专栏 1671

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hibernate脏数据检查

脏数据检查:    什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。我们看下面的代码:  Transaction tx=session.beginTransaction();  User user=(User)session.load(User.class,”1”);//从数据库中加载符合条件的数据  user.setName(“zx”);//改变了

huaweitman的专栏 1157

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hibernate 脏数据检查机制与数据缓存

一. 脏数据检查机制 脏数据:   脏数据并非废弃或者无用的数据,而是指一个数据对象所携带的信息发生了改变之后的状态.            如果我们从数据库中读取一个对象,事务提交时 Hibernate会对session 中的PO进行检测,判断哪些发生了变化,并将发生变化的数据更新到数据库中.          Hibernate如何判断一个数据对象是否发生了改变,或者说 Hiberna

330553352的专栏 1708

hibernate savealiasentity 保存后id为空_Hibernate 脏数据检查

脏数据检查:什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。我们看下面的代码:当事务提交时,Hibernate会对session中的PO(持久化对象)进行检测,判断持久化对象的状态是否发生了改变,如果发生了改变就会将改变更新到数据库中。这里就存在一个问题,Hibernate如何来判断一个实体对象的状态前后是否发生了变化。也就是说Hibernate是如何检查出一个数据已经变脏...

weixin_33683833的博客 160

hibernate 脏数据检查

http://zhangfeiii.iteye.com/blog/488519 脏数据检查: 什么是脏数据?脏数据并不是废弃和无用的数据,而是状态前后发生变化的数据。我们看下面的代码:Transaction tx=session.beginTransaction();User user=(User)session.load(User.class,”1”);//从数据库中加载符合条件的数据...

pb_watercuizhen的博客 126

Hibernate的脏数据检查机制:Session缓存与持久化上下文的生命周期

在数据库操作中,"脏数据"指的是那些已经被修改但尚未同步到数据库的数据。在 Hibernate 中,脏数据检查机制负责识别哪些持久化对象(Persistent Objects)的状态已经发生改变,需要在事务提交时同步到数据库。Hibernate 会将从数据库加载的对象的状态与当前对象的状态进行比较,如果检测到差异,就认为该对象是“脏的”,需要执行相应的 SQL 更新操作。

weixin_41455464的博客 764

hibernate脏数据检查(转)

脏数据检查: 什么是脏数据?脏数据并不是废弃 和无用的数据,而是状态前后发生变化的数据。我们看下面的代码: Transaction tx=session.beginTransaction(); User user=(User)session.load(User.class,”1”);//从数据库中加载符合条件的数据 user.setName(“zx”);//改变了user对象的姓名属...

翼づ坏坏的天空 229
上一篇: hibernate之实体对象生命周期
下一篇: 认识数据缓存
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值