实 体对象的生命周期在Hibernate应用中是一个很关键的概念,正确的理解实体对象的生命周期将对我们应用Hibernate做持久层设计起到很大的作 用.而所谓的实体对象的生命周期就是指实体对象由产生到被GC回收的一段过程.在这过程中我们需要理解的就是实体对象生命周期中的三种状态.
1.自由状态(Transient)
所谓的Transient状态,即实体对象在内存中自由存在,与数据库中的记录无关,通常是我们的J2EE中VO,并没有被纳入Hibernate的实体管理容器.
1 Test test = new Test();
2 test.setName("energykk");
3 //此时的test对象处于Transient(自由状态)并没有被Hibernate框架所管理
4
2.持久状态(Persistent)
何谓 Persistent? 即实体对象已经处于被Hibernate实体管理容器容器所管理的状态.这种状态下这个实体对象的引用将被纳入Hibernate实体管理容器容器所管理.
处于Persistent状态的实体对象,对它的变更也将被固化到数据库中.
在J2EE中通常指的是一个PO.
Transaction tr = session.beginTransaction();
session.save(test);
//此时的test对象已经处于Persistent(持久状态)它被Hibernate纳入实体管理容器
tr.commit();
Transaction tr2 = session.beginTransaction();
test.setName("xukai");
//在这个事务中我们并没有显示的调用save()方法但是由于Persistent状态的对象将会自动的固化到
//数据库中,因此此时正处在Persistent状态的test对象的变化也将自动被同步到数据库中
tr2.commit();
处于Persistent状态的实体可以简单的理解为:如果一个实体对象与session发生了关联,并且处于session的有效期内,那么这个实体对象就处于Persistent状态.
3.游离状态(Detached)
处于Persistent状态的实体对象,其对应的session关闭以后,那么这个实体就处于Detached状态.
我们可以认为session对象就是一个Persistent的宿主,一旦这个宿主失效,那么这个实体就处于Detached状态.
session.close();
//与test对象关联的session被关闭,因此此时的test对象进入Detached(游离状态)
session2 = HibernateSessionFactory.getSession();
Transaction tr3 = session2.beginTransaction();
session2.update(test);
//此时正处于Detached状态的test对象由于再次借助与session2被纳入到Hibernate的实体管理容器所以此时的
//test对象恢复到Persistent状态
test.setName("jjjj");
tr3.commit();
session2.close();
既然Transient状态的实体与Detached状态的实体都与Hibernate的实体管理容器没有关系,那他们到底存在哪些差异?
差异就在于处于Transient状态的只有一个Name的属性.此时的test对象所包含的数据信息仅限于此,他与数据库中的记录没有任何瓜葛.
但是处于Detached状态的实体已经不止包含Name这个属性,还被赋予了主键也就是通常POJO里的id属性,由于id是主键,他可以确定数据库表中的一条
唯一的记录,那么自然的处于Detached状态的实体就能与数据库表中拥有相同id的记录相关联.
这就是他们之间所存在的差异,简而言之,Transient状态的实体缺乏与数据库表记录之间的联系,而Detached状态的试题恰恰相反.只不过是脱离了session这个数据库操作平台而已.
相关推荐
Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
Hibernate的核心概念之一就是持久化对象的生命周期,这涉及到对象在数据库中的状态及其与Session的关系。 首先,我们来看一下Hibernate中持久化对象的三种基本状态: 1. **瞬时对象(Transient Objects)**: - ...
**hibernate3.2生命周期详解** Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。在Hibernate3.2版本中,实体对象经历了一系列的状态转换,这些...
`hibernate生命周期.jpg` 可能详细介绍了Hibernate实体在应用程序中的生命周期,包括瞬时态、持久态、托管态、脱管态和临时态。这些状态反映了对象与数据库的关联状态,理解它们对于管理对象的生命周期至关重要。 *...
#### 四、Hibernate生命周期状态 - **瞬时态(Transient)**: 实体对象未被持久化,尚未保存到数据库。 - **持久态(Persistent)**: 实体对象已与Session绑定,且已被保存到数据库。 - **游离态(Detached)**: ...
#### 三、Hibernate 生命周期管理 ##### 3.1 对象状态 在 Hibernate 中,对象有三种状态:瞬时态、持久态和脱管态。 - **瞬时态**: 对象尚未被 Session 管理,没有对应的数据库记录。 - **持久态**: Session 已经...
最后,`buildSessionFactory()` 方法生成 `SessionFactory`,它是整个 Hibernate 生命周期的核心。 6. **两个配置文件的作用**:通常,我们只需要 `hibernate.cfg.xml` 文件,但有时在 `hibernate.properties` 中...
4. Hibernate 生命周期: Hibernate 管理的对象有瞬时态(Transient)、持久态(Persistent)、托管态(Managed)和游离态(Detached)。了解这些状态及其转换对于理解 Hibernate 的工作原理至关重要。 5. CRUD ...
SessionFactory 是持久化操作的核心组件,它在整个 Hibernate 生命周期中保持不变,负责生成 Session。而 Session 是短暂的,每个数据库交互应在一个新的 Session 中进行。Session 提供了持久化上下文,它包含了所有...
Hibernate生命周期** - **瞬时状态(Transient)**: 新创建的对象,未与Session关联,对象的改变不会同步到数据库。 - **持久化状态(Persistent)**: 通过Session的save()或persist()方法,对象进入持久化状态,...
本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象(Transient Objects) 瞬时对象是指通过`new`操作符创建但尚未与数据库记录关联的Java对象...
1. **Hibernate生命周期**:Hibernate操作数据库的过程包括以下步骤: - 配置:加载配置文件并创建SessionFactory。 - 打开Session:通过SessionFactory创建Session。 - 开启Transaction:在Session中开启一个新...
在IT行业中,尤其是在Java开发领域,实体对象的生命周期管理是至关重要的一个环节,尤其是在使用ORM(Object-Relational Mapping)框架如Hibernate时。本文将详细探讨“测试实体对象的生命周期”,并结合给定的标签...
1. **持久化对象的生命周期**:在Hibernate中,对象经历了临时态、持久态和游离态三个状态。临时态的对象没有与Session关联,数据未保存到数据库;持久态对象已与Session绑定,其状态会随Session的提交而保存到...
9. **实体生命周期**:Hibernate管理对象的生命周期,包括瞬时态、持久态、托管态和游离态。理解这些状态转换有助于避免编程陷阱。 10. **一对多、多对一、一对一和多对多关系映射**:Hibernate支持多种关联映射,...
- **生命周期集成**: 理解如何将业务逻辑融入到持久化生命周期中。 - **注解映射**: 学会使用 Java 注解来进行实体类与数据库表的映射。 - **查询与搜索**: 熟悉新版本 Hibernate 中的查询语言和搜索功能。 - **...
8. **实体生命周期**:Hibernate管理实体的生命周期,包括瞬时态、持久态、托管态和脱管态,以及相应的转换过程。 9. **DAO(Data Access Object)模式**:在实际应用中,通常会结合DAO模式使用Hibernate,创建专门...