刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还是一个容器。它可以帮你管理实体对象的生命周期。
实体对象的生命周期有三种状态:
1.Transient(自由状态)
此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。
2.Persistent(持久状态)
此时的实体对象和数据库中的记录有关联,其变更将由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所管理的状态。
3.Detached(游离状态)
处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象。
从实体对象是否被纳入Hibernate实体管理容器的角度,Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。两者的区别:
1.VO是相对独立的实体对象,处于非管理状态。
2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反映到实际数据库中。
3.如果一个PO与其对应的Session实例分离,那么此时,它又会变成一个VO。
Hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached).处于持久态的对象也称为PO(PersistenceObject),瞬时对象和脱管对象也称为VO(ValueObject).
瞬时态
由new命令开辟内存空间的java对象,
eg.Person person=new Person("xiaoxiao","女");
如果没有变量对该对象进行引用,它将被java虚拟机回收.
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象.
持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识.如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联.
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下.
持久对象具有如下特点:
1.和session实例关联;
2.在数据库中有与之关联的记录.
脱管态
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象.当脱管对象被重新关联到session上时,并再次转变成持久对象.
脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象.
脱管对象具有如下特点:
1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
2.比瞬时对象多了一个数据库记录标识值.
分享到:
相关推荐
**hibernate的生命周期** Hibernate 是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据库事务。在Hibernate中,每个持久化对象都有一个生命周期,...
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
在Hibernate3.2版本中,实体对象经历了一系列的状态转换,这些状态被称为对象的生命周期。理解这些生命周期状态对于优化数据库操作和避免潜在的问题至关重要。 ### 1. Hibernate对象状态 对象在Hibernate中有以下...
理解并掌握这些状态,可以帮助我们更好地控制对象的生命周期,避免数据不一致。 在实体层设计中,还要考虑性能优化。例如,通过懒加载(Lazy Loading)策略,我们可以延迟加载关联的对象,以减少数据库查询次数。...
在IT行业中,尤其是在Java开发领域,实体对象的生命周期管理是至关重要的一个环节,尤其是在使用ORM(Object-Relational Mapping)框架如Hibernate时。本文将详细探讨“测试实体对象的生命周期”,并结合给定的标签...
`HibernateSessionFactory`通常在应用启动时初始化一次,然后在整个应用生命周期中复用,以提高性能。创建`SessionFactory`通常涉及配置Hibernate的XML文件,其中包含了数据库连接信息、实体映射等设置。 `...
2. **持久化状态(Persistent)**:当实体对象被加入到Session的管理范围,即在Session的生命周期内,就进入了持久化状态。这意味着对象与数据库中的记录建立了绑定,任何对实体对象的修改都会在Session flush时同步到...
8. **实体生命周期**:Hibernate管理实体的生命周期,包括瞬时态、持久态、托管态和脱管态,以及相应的转换过程。 9. **DAO(Data Access Object)模式**:在实际应用中,通常会结合DAO模式使用Hibernate,创建专门...
9. **实体生命周期**:Hibernate管理对象的生命周期,包括瞬时态、持久态、托管态和游离态。理解这些状态转换有助于避免编程陷阱。 10. **一对多、多对一、一对一和多对多关系映射**:Hibernate支持多种关联映射,...
综上所述,解决Hibernate自动更新实体类的问题,关键在于理解和控制Hibernate的生命周期、持久化状态以及事务管理。通过调整配置、使用特定的API和理解事务隔离级别,我们可以有效地防止或控制自动更新行为,确保...
2. 实例化SessionFactory:SessionFactory是线程安全的,通常在应用程序启动时创建一次,然后在整个应用生命周期中重用。 3. 开启Session:每次需要进行数据库操作时,都会创建一个Session实例,它代表一个数据库...
10. **实体生命周期** Hibernate管理着对象的生命周期,包括初始化、持久化、脱管和删除。通过回调方法如`@PrePersist`、`@PostLoad`等,开发者可以在特定生命周期阶段执行自定义逻辑。 通过仿写Hibernate的持久层...
2. 实体监听器:通过实现EntityListener接口,开发者可以在特定的生命周期事件(如保存、更新、删除等)中执行自定义逻辑,提高了代码的复用性和灵活性。 三、SQL日志生成 Hibernate-Extensions能够自动记录和打印...
6. **实体生命周期管理**:Hibernate自动管理对象的生命周期,包括加载、持久化、脱管和删除等状态。 7. **类型转换和用户类型**:Hibernate支持基本数据类型的自动转换,同时也允许自定义复杂类型的映射。 8. **...
- **实体管理**:了解实体生命周期(瞬态、持久化、托管和脱管),以及状态转换的过程。 - **HQL和Criteria API**:学习如何构建面向对象的查询,以及它们与原生SQL的区别。 - **缓存机制**:掌握一级缓存(Session...
自动更新的根源在于Hibernate的生命周期管理。当实体被加载到Session后,它会被添加到Session的缓存中。当实体的任何属性发生变化,Session都会检测到这个变化并标记为“脏”(dirty)。在事务提交时,所有脏对象...
23.1.1 Session对象的生命周期与本地线程绑定 23.1.2 Session对象的生命周期与JTA事务绑定 23.2 实现对话 23.2.1 使用游离对象 23.2.2 使用手工清理缓存模式下的Session 23.3 小结 23.4 思考题 第24章...
- **生命周期集成**: 理解如何将业务逻辑融入到持久化生命周期中。 - **注解映射**: 学会使用 Java 注解来进行实体类与数据库表的映射。 - **查询与搜索**: 熟悉新版本 Hibernate 中的查询语言和搜索功能。 - **...
8. **实体生命周期**:详细解释了实体在Hibernate中的生命周期,包括瞬时态、持久态、脱管态的转换,以及如何触发这些状态变化。 9. **关联映射的深入**:涵盖了复杂关联的处理,如双向关联、自关联、多对多关联中...