1:自由状态(Transient)
自由状态(Transient),是指实体对象在内存中自由存在,他与数据库的记录无关。
如:
TUser user = new TUser();
user.setName("MyName");
这里的user对象只是一个非常普通的java对象,与数据库中的记录没有任何关系。
2:持久状态(Persistent)
持久状态(Persistent),即实体对象处于Hibernate框架的管理状态,实体对象被纳入Hibernate的实体容器中管理。处于持久状态的对象,其更变将由Hibernate固化到数据库中。
如:
TUser user_1 = new TUser();
TUser user_2 = new TUser();
user_1.setName("Name_1");
user_2.setName("Name_2");
Transaction tx = session.begintransaction();
session.save(user_1);
通过session的save方法,user_1对象已经被纳入Hibernate的实体管理容器,处于持久化状 //态(Persistent),这时候对user_1对象的任何修改都将被同步到数据库中。 tx.commit(); //而user_2仍然才处于自由状态(Transient),不受Hibernate框架的管理。
从上面看到,处于自由状态的实体对象,可以通过Hibernate的Session.sava方法转化为持久状态。
除了用Session.save方法外,还可以通过其他方法来获取一个持久状态的对象,那就是直接通过Hibernate加载的对象,通过Session.load方法,可以直接加载一个处于持久状态的实体对象。如下:
TUser user = Session.load(TUser.class,new Integer(1)); //在load方法没返回之前,就已经先把对象纳入Hibernate的管理范围,所以这里的user //已经处于持久状态。
从上面的代码可以看出,处于持久状态的实体对象一定要和Session关联,并处于该Session的有效期内。
3:游离状态(Detached)
处于持久状态的实体对象,在其关联的Session关闭以后,此实体对象就处于游离状态,
TUser user = new TUser();
user.setName("name_1");
Transaction tx = session.begintransaction();
session.save(user);
//把自由状态的实体对象user转为持久状态, tx.commit();
session.close(); //session关闭以后,处于持久状态的实体对象user将转为游离状态。
//因为此时user已经和session脱离关系。
三种状态的转化
自由状态-->持久状态:可以通过Session.sava方法来转换。
持久状态-->游离状态:可以通过Session.close方法来关闭session,获取游离状态的对象
持久状态-->自由状态:可以通过Session.delete方法来删除实体对象对应的数据库记录,使实体对象处于自由状态。
文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/20090204/154816.html)
分享到:
相关推荐
**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的持久层...
总之,《深入浅出Hibernate》读书笔记涵盖了实体对象生命周期的转换、实体对象的识别机制以及Hibernate的多级缓存策略,这些都是理解并有效使用Hibernate的关键点。通过深入学习这些概念,开发者能够更好地掌握...
2. 实体监听器:通过实现EntityListener接口,开发者可以在特定的生命周期事件(如保存、更新、删除等)中执行自定义逻辑,提高了代码的复用性和灵活性。 三、SQL日志生成 Hibernate-Extensions能够自动记录和打印...
6. **实体生命周期管理**:Hibernate自动管理对象的生命周期,包括加载、持久化、脱管和删除等状态。 7. **类型转换和用户类型**:Hibernate支持基本数据类型的自动转换,同时也允许自定义复杂类型的映射。 8. **...
1. **定义**:介绍了如何使用实体监听器和回调方法来响应实体的生命周期事件。 2. **继承**:探讨了实体监听器和回调方法在继承结构中的行为。 3. **XML 定义**:展示了如何在配置文件中定义实体监听器。 #### ...
- **实体管理**:了解实体生命周期(瞬态、持久化、托管和脱管),以及状态转换的过程。 - **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章...