在Hibernate中的对象有三种状态,即:
瞬时状态(Transient)、持久状态(Persistent)、脱管状态(Detached)
1、瞬时状态(Transient)
由new命令开辟内存空间的Java对象,也就是平时所熟悉的普通Java对象。
如:Person p = new Person();
瞬时对象特点:
(1)不和Session实例关联
(2)在数据库中没有和瞬时对象关联的记录
2、持久状态(Persistent)
持久的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier).
持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在 Transaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏(dirty)对象。
瞬时对象转为持久对象:
(1) 通过Session的save()和saveOrUpdate()方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。
(2) 使用fine(),get(),load()和iterater()待方法查询到的数据对象,将成为持久化对象。
持久化对象的特点:
(1) 和Session实例关联
(2) 在数据库中有和持久对象关联的记录
3、脱管状态(Detached)
与持久对象关联的Session被关闭后,对象就变为脱管对象。对脱管对象的引用依然有效,对象可继续被修改。
脱管对象特点:
(1) 本质上和瞬时对象相同
(2) 只是比爱瞬时对象多了一个数据库记录标识值id.
持久对象转为脱管对象:
当执行close()或clear(),evict()之后,持久对象会变为脱管对象。
瞬时对象转为持久对象:
通过Session的update(),saveOrUpdate()和lock()等方法,把脱管对象变为持久对象。
==================================================================================
merge(): 调用merge()函数
将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象。如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。
attachDirty(): 调用saveOrUpdate()函数
将传入的对象持久化并保存。如果对象未保存(Transient状态),调用save方法保存。如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。
attachClean(): 调用lock()函数
将传入的对象状态设置为Transient状态。
分享到:
相关推荐
当我们使用 merge 方法时,Hibernate 会根据对象的状态来决定是否执行插入或更新操作。如果对象的 ID 已经存在于数据库中,那么 merge 方法将执行更新操作;否则,它将执行插入操作。 在 Hibernate 中,对象可以...
调用merge()时,Hibernate会先在当前Session中查找具有相同ID的对象,如果找到则更新其状态;如果找不到,则创建一个新的持久化实例,并复制传入对象的所有属性值。最后,所有更改将在事务提交时同步到数据库。 四...
在Java的ORM框架Hibernate中,`merge()`是一个非常重要的操作,它主要用于将游离态或瞬态的对象合并到持久化状态。理解`merge()`的工作原理对于优化数据操作和避免潜在的冲突至关重要。以下是对`merge()`函数的详细...
在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现在对实体状态的处理方式上。 #### 1. `merge` 方法 `...
可以通过Session的`save()`, `saveOrUpdate()`, `merge()`等方法将临时状态的对象转换为持久化状态。 3. **游离状态(Detached)**:游离状态的实体对象已经离开了Session的管理,但它的主键ID仍然与数据库中的一条...
在Hibernate框架中,`merge()`是一个非常重要的方法,用于将一个对象的状态合并到当前的Session中。当调用`merge()`方法时,Hibernate会检查传入的对象是否已经在当前Session中存在。如果不存在,它将作为一个新对象...
然而,如果知道对象的主键,可以通过Session的`merge()`方法重新将其纳入管理,使得对象恢复到持久状态,并将当前的属性值同步到数据库。另外,如果希望删除一个对象,可以在Session中调用`delete()`方法,前提是在...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
- **merge()**:将脱管对象的状态合并到当前 Session 中的持久化副本,如果不存在副本则创建一个,然后更新数据库。 - **flush()**:强制 Session 将所有挂起的更新写入数据库。 - **lock()**:锁定对象,防止其他...
在 Hibernate 中,对象的状态管理是至关重要的,因为它直接影响到对象如何与数据库交互。以下是 Hibernate 中对象的三种状态以及相关的保存方法: 1. **瞬时对象(Transient Objects)** - 当使用 `new` 关键字...
在Java的持久化框架Hibernate中,对象的状态管理是其核心特性之一。理解并掌握对象的三种状态对于开发高效、稳定的数据库应用至关重要。本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 ...
Hibernate对象有三种状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于优化数据操作和避免潜在的问题至关重要。 首先,瞬时状态(Transient)是指通过new关键字创建的...
Araxis Merge是一款比对软件工具,不仅支持单个文件的比对,而且支持对两个文件夹的所有文件进行对比,并实时修改。用了蛮久感觉很好用,所以分享给大家。 里面给大家内嵌了Araxis Merge v6.5和Araxis Merge 2017两...
本篇将详细探讨Hibernate中的对象状态,这对于我们理解和优化应用性能至关重要。 首先,我们需要理解Hibernate管理的对象有三种主要状态:瞬时态(Transient)、持久态(Persistent)和脱管态(Detached)。每种...
- **游离状态 → 持久化状态**:可以通过再次调用 `save()`、`persist()` 或 `merge()` 方法将游离对象转变为持久化对象。 #### 六、总结 理解 Hibernate 中对象的状态管理对于正确地使用框架至关重要。瞬时状态、...
在 Hibernate 框架中,`lock` 和 `merge` 是两个重要的操作,它们涉及到对象的状态管理和事务控制。本文将详细解析这两个概念及其在实际应用中的作用。 首先,`lock` 方法是 Hibernate 提供的一个机制,用于在不同...
- **Merge()**:将 detached 对象的状态合并到数据库。 - **Delete()**:从数据库中移除对象。 - **Find()**:根据ID检索对象,或使用HQL/Criteria查询。 7. **性能优化**: - 第二级缓存:通过引入缓存插件如...
WinMerge是一款强大的文本和文件比较工具,尤其在IT行业中,它是开发者和版本控制使用者的得力助手。这个软件能够帮助用户高效地对比不同版本的代码或者其他文本文件,从而快速定位和理解版本之间的差异。 首先,...
Hibernate将对象的状态划分为四种:临时状态、持久化状态、游离状态和删除状态。这些状态反映了对象与数据库记录之间的关系,有助于理解Hibernate如何管理和操作数据。 1. **临时状态(Transient State)**: 当一...
6. 对象状态:Hibernate区分了瞬时、持久化、托管和脱管四种对象状态,理解这些状态有助于正确管理对象的生命周期。 7. 关联映射:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多...