都知道Hibernate的对象有三态,即游离态、持久态、脱管态。那么这三种状态的对象到底怎么区别呢?我做了一个小的测验。
User user = new User();
user.setId(4);
user.setUsername("heyuanling2");
user.setAge(23);
user.setSex("w");
user.setPassword("heyuanling");
Session session = this.getSession();
Transaction tr = session.beginTransaction();
//User exituser = (User)session.get(User.class, new Integer(1));
session.update(user);
tr.commit();
//User uu = (User)session.merge(user);
//System.out.println(uu.getUsername());
session.close();
大家注意到,这里我们给这个刚创建的对象设置了Id,这样当我们使用update的时候,hibernate就会根据id去数据库里更新该记录,当然前提是id为4的记录在数据库里必须存在。那如果我们不设置id呢?结果就会报错。看来,Hibernate所宣称的持久化对象,不过就是拥有了id值的一个POIO对象罢了。因为在session里做数据库的操作时,hibernate会自然的帮我设置上id值。所以我认为,游离态和持久态对象的唯一差别就是有没有id号。
那脱管和持久又有什么区别呢?很简单,脱管就是不在session管制之下,也就是session已经关闭了而已。其实在内存里,不管你session是不是关闭了,你的POJO对象还是存在的,没有被消亡,总要给它取个名字吧,所以就叫脱管。那我们也可以这么理解,上面程序当中的user对象也是脱管的,因为人家有id,数据库里有对应的记录,而且在session.update(user)之前它跟session也没有任何关系,把他叫脱管对象也没有错,而叫游离的似乎也可以,反正就一个概念罢了。其实搞这么多概念坑了好多人,哎。。。
分享到:
相关推荐
**hibernate的生命周期** ...总之,理解并熟练掌握Hibernate对象的生命周期,对于编写高效、可靠的Java应用程序至关重要。正确管理对象状态,合理使用生命周期方法,能帮助我们避免不必要的数据库操作,提升应用性能。
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
总结,理解Hibernate3.2中的对象生命周期是有效使用Hibernate的关键。正确管理对象状态,能够避免数据丢失,提高应用程序性能,并减少潜在的并发问题。深入源码和使用专业工具能进一步提升开发效率。
本文将深入探讨Hibernate中的持久化对象生命周期,包括瞬时对象、持久化对象和游离对象的状态转换及其特性。 1. 瞬时对象(Transient Objects) 瞬时对象是指通过`new`操作符创建但尚未与数据库记录关联的Java对象...
### Hibernate对象生命周期、持久化与会话管理 #### 概述 在开发基于Java的应用程序时,特别是涉及数据库操作的应用场景下,Hibernate作为一款流行的Java持久层框架,为开发者提供了对象关系映射(ORM)的强大功能...
在IT行业中,尤其是在Java开发领域,实体对象的生命周期管理是至关重要的一个环节,尤其是在使用ORM(Object-Relational Mapping)框架如Hibernate时。本文将详细探讨“测试实体对象的生命周期”,并结合给定的标签...
这些状态决定了对象与数据库之间的关联程度,以及Hibernate如何处理对象的生命周期。以下是Hibernate对象的三种主要状态及其特点: 1) 临时状态(Transient State): 当通过`new`关键字创建一个新的对象时,该对象...
9. **生命周期方法**:在某些编程语言和框架中,领域对象可能包含一些生命周期方法,如 `save()`、`delete()`、`load()` 等,用于操作对象的生命周期。 10. **CQRS(命令查询责任分离)**:在复杂系统中,CQRS 模式...
8. Hibernate对象生命周期: - Hibernate管理的对象生命周期包括瞬时态(Transient)、持久态(Persistent)、托管态(Managed)、脱管态(Detached)和删除态(Removed)。 以上就是“Hibernate考试题.pdf”中...
在Hibernate中,通过`@ManyToOne`或`@OneToOne`注解表示,但需要注意的是,聚合关系通常不会影响对象的生命周期。 这些关系模型在Hibernate中通过注解或者XML配置文件进行定义,以实现Java对象和数据库记录之间的...
Hibernate允许开发者定义对象的生命周期回调方法,如preInsert()、postInsert()、preUpdate()等,以便在对象状态改变时执行特定的业务逻辑。 **九、懒加载与立即加载** 懒加载(Lazy Loading)是一种优化策略,只在...
在Hibernate中,对象的生命周期包括瞬时态、托管态、持久态和脱管态。通过Hibernate,我们可以轻松地将对象从内存中保存到数据库,或者从数据库中加载到内存。 **三、Hibernate配置** 使用Hibernate,首先需要配置...
1. **持久化对象的生命周期**:在Hibernate中,对象经历了临时态、持久态和游离态三个状态。临时态的对象没有与Session关联,数据未保存到数据库;持久态对象已与Session绑定,其状态会随Session的提交而保存到...
一旦对象变为持久态,Hibernate会负责它的生命周期管理,包括插入、更新和删除操作。 二、一对一(OneToOne)关系映射 在数据库设计中,一对一关系意味着两个实体表之间存在唯一映射。在Hibernate中,可以通过@...
在 Hibernate 框架中,Java 对象...开发者应合理管理 Session 生命周期,避免并发问题,确保数据的一致性和完整性。同时,根据具体应用需求,选择合适的缓存清理策略和对象状态转换时机,以达到最佳的数据库操作效果。
6. **实体生命周期管理**:Hibernate自动管理对象的状态,包括瞬态、持久化、托管和脱管四种状态,以及它们之间的转换。 7. **多对一、一对多、多对多关系映射**:Hibernate支持复杂的关联关系映射,如单向关联、...
23.1.1 Session对象的生命周期与本地线程绑定 23.1.2 Session对象的生命周期与JTA事务绑定 23.2 实现对话 23.2.1 使用游离对象 23.2.2 使用手工清理缓存模式下的Session 23.3 小结 23.4 思考题 第24章...