在Java语言中,对象之间的比较可以通过引用比较(==)和内容比较(equals)两种方式进行,而在Hibernate的实体对象的比较是通过主键值来比较,如果要实现自己的识别逻辑,则需要重写equals方法和hashCode方法。
检查数据对象改变检查的一般策略有下面两种:
1. 数据对象监控
数据对象监控的实现方式,通过拦截器对数据对象的设值方法进行拦截。一旦数据对象的设置方法被调用,则将其标志为“待更新”状态,之后在数据库操作时将其更新到对应的库表。
2. 数据版本对比
在持久层框架中维持数据对象的最近读取版本,当数据提交时将提交数据与此版本进行比对,如果发生变化则将其同步到数据库对应的库表。
Hibernate采取的是第二种检查策略。它采用一个内部数据结构"EntityEntry"保存对应实体类的状态信息。
对于级联对象的更新,Hibernate将根据unsaved-value进行判定。首先Hibernate会取出目标对象的id。之后,将此值与unsaved-value进行比对,如果相等,则认为目标对象尚未保存,否则,认为对象已经保存,无需再进行保存操作。
《深入浅出Hibernate》读书笔记(2)——实体对象识别
最新推荐文章于 2025-12-03 16:18:05 发布
本文介绍了Hibernate框架中如何管理和检查实体对象的状态变化,包括通过主键值进行对象比较的方法及实现自定义识别逻辑的方式。此外还探讨了两种主要的数据对象改变检查策略:数据对象监控和数据版本对比,并详细解析了Hibernate采用的第二种策略。
736

被折叠的 条评论
为什么被折叠?



