一.Session的参与
- 普通对象就两种状态:new出一个对象,还有生命的状态;不被任何变量引用,被GC回收,死亡状态。
- 本文讨论的三种状态:在hibernate session的干预下,在这个对象和数据库的某条记录相关联的条件下,“new出一个对象,还有生命的状态”会演变成三种更加具体的状态:临时状态transient,持久化状态persistent,游离状态detached。
二. 临时状态
刚刚new出一个实体对象的时候,该对象未和任一条数据库记录想关联(也就是对象未和任何一个session相关联,对象没有主键这一持久化标识),此时的状态时临时状态。
- 临时状态的特点:
- 未和任何session相关联。
- 未和任一条数据库记录相关联。
- 临时状态的转换
- new一个对象,此对象处于临时状态。
- session.delete(持久化对象或者游离状态对象)时,持久化对象或者游离状态对象变成临时状态对象。对于持久化对象,delete删除其在数据库对应的记录,并删除此对象在session中的缓存;对于游离态对象,delete删除其在数据库对应的记录。
三. 持久化状态
持久化对象是指实体对象处于由Hibernate框架所管理的状态,实体对象被纳入Hibernate实体容器中加以管理。
- 持久化状态的特点
- 持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Transaction终止,也就是执行commit()之后才在数据库中真正运行SQL进行变更,持久对象的数据才会与数据库进行同步。同步之前的持久对象称为脏(dirty)对象
- 数据库里面有某一条记录与持久化对象相对应。
- 持久化状态的转换
- session的save()方法把对象从临时状态转换成持久化状态。
- session的load()方法和get()方法返回的对象也是持久化状态。
- session的find()方法返回的list对象也是持久化状态。
- session的update() saveorUpdate() lock()方法是对象从游离状态转换持久化状态。
- 一个持久化状态对象级联一个临时状态对象,保存这个持久化状态时,同时会保存这个临时状态,临时状态对象转换成持久化状态对象。
四.游离状态
与持久对象关联的session被关闭后,对象就变成游离状态。
- 游离状态的特点
- 不被任何session关联;如果没有变量引用此对象的情况下,GC回收此对象。这个和临时状态是一样的。
- 比临时状态多了一个与数据库标识的OID。
- 游离状态的转换
- session.close()方法,finally里面会调用persistenceContext.clear(),导致session的缓存被清空,所有的持久化对象变成游离态对象。
- session.evict(Object obj)方法,清空一个对象,该对象由持久态变成游离态。当session中保存了大量缓存对象时,手动调用evict(Object ob)方法可以减少缓存,但不推荐。
- session.clear(),会调用persistenceContext.clear(),清空所有缓存。
五.总结
以下面一张状态转换图作为总结,图片来源无从考证,在此谢谢绘图者。
分享到:
相关推荐
在Java的ORM框架Hibernate中,实体管理是其...理解并熟练运用Hibernate的实体状态转换,对于优化数据操作和提高代码效率至关重要。在实际开发中,开发者应根据业务需求选择合适的转换方式,确保数据的正确性和一致性。
8. **实体生命周期**:详解Hibernate对对象状态的管理,包括瞬时态、持久态、游离态和脱管态,以及对象状态转换和事件监听器。 9. **多态和继承映射**:讲解如何处理类的继承关系,实现多态查询,包括单表继承、...
在Java应用开发中,对象持久化是一个关键环节,它涉及将程序中的对象状态存储到持久化介质(如关系型数据库)中,并在需要时恢复这些状态。Hibernate作为ORM(对象关系映射)框架,通过提供一种面向对象的方式来处理...
Hibernate 是一个流行的 Java 开发框架,用于简化数据库...理解 Hibernate 对象状态及其转换对于有效管理和优化数据库操作至关重要。正确使用这些状态和保存方法能够避免数据冗余和丢失,提高应用的性能和数据一致性。
- **概念**: Hibernate的设计遵循面向对象的思想,将实体对象和数据库之间的转换封装在内部。 #### 3. 持久化类(Persistent Classes) - **定义**: 持久化类是指与数据库中的表相对应的Java类。 - **要求**: 必须有...
在Java的持久化框架Hibernate中,对象存在三种不同的状态,分别是持久态(Persistent)、自由态(Transient)和游离态(Detached)。这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate...
4. 状态转换: 瞬时态到持久态的转换通常通过`save()`或`persist()`完成。持久态对象在Session关闭后会自动变为脱管态。脱管态对象可以通过`merge()`或`saveOrUpdate()`恢复为持久态。值得注意的是,`saveOrUpdate()...
通过学习Hibernate,开发者可以掌握如何编写实体映射文件,如何定义对象-关系映射,以及如何使用Hibernate进行单表的增删改查操作。这将极大地提高开发效率,降低出错概率,使得Java应用程序的数据库操作更加便捷和...
同时,文档《Hibernate对象状态及一对多关联.doc》详细介绍了如何设置和管理一对多关联,这种关联在企业级应用中非常常见,例如一个用户可以有多个订单。 2. **一对一和多对多关联** 在《Hiberate一对一和多对多...
Hibernate通过注解或XML配置文件,将Java类与数据库表关联起来,实现了对象模型和关系模型的转换。这包括主键外键的设置、关联规则、级联操作和懒加载策略等,让开发者能够更自然地进行面向对象编程,而不是被数据库...
- **Hibernate**:错误通常与对象状态或映射配置相关,更容易理解和修复。 7. **学习曲线**: - **JDBC**:相对简单,易于上手,但需要深入理解 SQL。 - **Hibernate**:学习曲线较陡峭,需要理解 ORM 概念和...
Hibernate将对象分为瞬时态、持久态和游离态,理解这些状态及其转换对于理解对象生命周期和事务管理至关重要。 8. **关系映射** Hibernate支持一对一、一对多、多对一、多对多等各种复杂的关系映射,这是其强大之...
8.3 Java对象在Hibernate持久化层的状态 8.3.1 临时对象的特征 8.3.2 持久化对象的特征 8.3.3 被删除对象的特征 8.3.4 游离对象的特征 8.4 Session接口的详细用法 8.4.1 Session的save()和persist()...
《Hibernate DOC中文文档》是学习Hibernate框架的重要参考资料,它详细阐述了Hibernate的核心概念、配置、对象关系映射(ORM)以及各种操作技巧。对于初学者和有经验的开发者来说,这份文档都是掌握Hibernate不可或...
在 Hibernate 框架中,Java 对象的状态管理和 Session 缓存是核心概念,它们直接影响着数据的持久化过程和数据库...同时,根据具体应用需求,选择合适的缓存清理策略和对象状态转换时机,以达到最佳的数据库操作效果。
ORM的主要目标是将应用程序中的对象状态保存到关系型数据库中,或者从数据库中读取数据并转换为对象状态。 - **Hibernate的角色**:Hibernate作为Java环境下的ORM工具,不仅能够处理Java类与数据库表之间的映射,...
理解 Hibernate 的对象状态和这些操作方法的差异对于优化数据库操作和确保数据一致性至关重要。正确地使用这些状态和方法可以避免数据丢失,提高应用程序的性能和可靠性。在实际开发中,根据业务需求选择合适的方法...
理解Hibernate的对象状态对于有效地进行数据库操作至关重要。正确管理对象状态可以避免数据丢失、重复插入或其他数据库一致性问题。在开发过程中,应该注意何时创建、保存、更新和删除对象,以及它们与Session的关系...
【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...