Hibernate 持久化对象的生命周期(lifecycle):
1. transient Objects(瞬时对象)
使用new操作符初始化的对象不是立即就持久的。他们的状态时瞬时的,也就是说它们没有任何跟数据库表相关联的
行为。只要应用不再引用这些对象(不再被任何其他对象所引用),他们的状态就会丢失,并由垃圾回收机制回收。
2. Persistent Objects(持久对象):
是任何就有数据库标识的实例。它由持久化管理器Session统一管理,持久化实例是在事务中操作的——它们的状态在
事务结束时同数据库同步。当事务提交时,通过执行SQL的insert、update、delete语句把内存中的状态同步到数据
库。
3. Detached Objects(离线对象):
Session关闭之后,持久化对象就变为离线对象。离线对象表示这个对象不能再与数据库保持同步,他们不再
受Hibernate管理。
注意:
瞬时对象和离线对象的主要区别是离线对象在数据库中有对应记录(有没有这条记录是看主键来判断的)。主要共同点是transient 对象和detached 对象都可以被垃圾回收机制回收,因为它们没有被session管理,瞬时对象和离线(又称脱管)对象也称为VO(Value Object)。
transient 执行了save()就变成了persistent状态,持久的对象执行了session.close() or clear() 等,就变成了离线状态,session没有管理它,可以被垃圾回收。因为数据库中还存在与离线对象对应的记录,所以可以执行update(),重新把detached 对象变为persistent对象,又放入了session的缓存中了,又被session管理了。
persistent对象在数据库中有对应记录,也纳入了session 的管理。当执行delete(),状态变成了transient ,数据库中已经没有与之对应的对象,也没被session管理,可以被垃圾回收。新new出来的对象也是transient的。
瞬时态由new命令开辟内存空间的java对象,eg. Person person = new Person("xxx", "xx");如果没有变量对该对象进行引用,它将被java虚拟机回收。瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
持久态处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象, 因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有 数据库识别值,但它已不在HIbernate持久层的管理之下。
持久对象总是与 Session 和 Transaction 相关联,在一个 Session 中,对持久对象的改变不会马上对数据库进行变更,而必须在 Transaction 终止,也就是执行 commit() 之后,才在数据库中真正运行 SQL 进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏 (dirty) 对象。
详细的配图说明:
http://fehly.iteye.com/blog/619825
http://www.iteye.com/topic/859826
分享到:
相关推荐
在Struts1.2和Hibernate3.2集成中,Spring可以作为它们之间的粘合剂,比如管理Action的生命周期,提供数据访问的事务控制。 再来看Hibernate3.2,它是Java世界中广泛使用的ORM解决方案。通过将Java对象映射到数据库...
9. **实体状态管理**:Hibernate 3.2 理解对象的生命周期,包括瞬时态(Transient)、持久态(Persistent)、游离态(Detached)和删除态(Removed),这有助于正确管理对象的状态并优化数据库操作。 10. **集合...
SessionFactory是线程安全的,一般在应用启动时创建一次,然后在整个应用生命周期中重复使用。 3. **Session**:Session是与数据库交互的主要接口,它提供了保存、更新、删除对象以及执行HQL(Hibernate查询语言)...
SessionFactory是线程安全的,通常在整个应用生命周期中只创建一个。 - **Session**:它是与数据库交互的前线接口,用于执行CRUD操作(创建、读取、更新和删除)。 - **Query和Criteria API**:这两者提供了执行...
- 可以通过实现Hibernate的事件接口,注册监听器,对对象的生命周期事件(如保存、更新、删除等)进行自定义处理。 综上所述,Hibernate 3.2是一个强大而灵活的ORM框架,它极大地简化了Java开发中的数据持久化工作...
10. **Callback事件**:Hibernate允许在对象生命周期中的特定时刻(如加载、保存、更新和删除)注册回调方法,实现业务逻辑。 11. **Association Mapping关联映射**:Hibernate支持一对一、一对多、多对一、多对多...
在Hibernate3.2版本中,实体对象经历了一系列的状态转换,这些状态被称为对象的生命周期。理解这些生命周期状态对于优化数据库操作和避免潜在的问题至关重要。 ### 1. Hibernate对象状态 对象在Hibernate中有以下...
五、对象状态与生命周期 在Hibernate中,对象有三种状态:瞬时态、持久态和脱管态。理解这些状态对于正确操作对象至关重要,例如,只有持久态对象才能参与事务。 六、缓存机制 Hibernate 3.2引入了二级缓存,通过...
它是线程安全的,通常在应用启动时创建,然后在整个应用生命周期内复用。 4. **Session**:Session 是与数据库交互的主要接口,提供了事务管理和数据持久化的功能。它支持CRUD(创建、读取、更新、删除)操作,并...
Spring2.5则是一个全面的后端解决方案,它包含了依赖注入(DI)和面向切面编程(AOP)的核心特性,可以用来管理对象的生命周期和装配。此外,Spring的DAO支持和事务管理简化了数据访问层的实现。Spring与Hibernate的...
8. **事件监听器**:Hibernate 3.2允许开发者注册事件监听器,对对象的生命周期事件(如加载、保存、更新、删除)进行拦截和处理。 9. **集合映射**:在实体类中,可以定义一对多、一对一、多对一、多对多的关系。...
在SSH集成中,Spring主要负责服务层的管理,包括bean的生命周期管理、事务控制以及与Hibernate的整合。 Hibernate3.2是一个对象关系映射(Object-Relational Mapping,ORM)框架,它简化了数据库操作,将Java对象与...
讲解其生命周期、事务管理和并发控制。 5. **Query与Criteria API**:介绍HQL(Hibernate Query Language),一种面向对象的查询语言,以及Criteria API,用于动态构建查询。包括基本查询、条件查询、分页查询、...
8. **事件监听和拦截器**:Hibernate允许开发者通过实现特定接口或使用注解定义监听器,可以在对象生命周期的不同阶段执行自定义逻辑,如对象加载、保存、更新和删除时。 9. **关联映射**:包括一对一(@OneToOne)...
**hibernate3.2 API** 是一个针对Java开发者的重要框架,主要用于简化对象关系映射(ORM)的工作,使得在Java应用中操作数据库变得更加便捷。这个API提供了丰富的接口和类,帮助开发者将业务对象和数据库表之间的...
5. 新的事件监听系统:允许开发者在对象生命周期的不同阶段插入自定义逻辑,如对象加载、保存、更新和删除时触发事件。 6. 改进的持久化上下文:增强了持久化上下文的管理,减少了内存占用,提升了并发性能。 三、...
EntityPersister和AbstractEntityTuplizer等类负责实体的管理,理解这些状态转换机制对于理解对象的生命周期至关重要。 6. **缓存机制** Hibernate 3.2支持一级缓存(Session级)和二级缓存(SessionFactory级),...
在本例中,Spring将作为服务层的容器,管理对象的生命周期和依赖关系。通过Spring的AOP,我们可以方便地实现事务管理,确保数据操作的一致性。 Hibernate 3.2 是一款流行的Java持久化框架,它简化了与数据库的交互...
8. **Event Listeners**:Hibernate3.2引入了事件监听器机制,开发者可以通过实现特定接口,注册监听器来拦截和自定义对象的生命周期事件,如保存、更新、删除等。 9. **Performance Enhancements**:此版本针对...