`

Hibernate 实体对象的状态及转化

 
阅读更多

实体对象的状态及转化:
有了上面关于Hibernate缓存的知识,我们再来介绍实体对象的状态就非常容易理解了。
A:自由态对象:(临时状态-transient)
当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下:
Customer customer=new Customer(“zx”,27,images);
这时customer对象就处于自由状态,为什么说customer对象处于自由状态呢?这是因为,此时customer只是通过JVM获得了一块内存空间,还并没有通过Session对象的save()方法保存进数据库,因此也就还没有纳入Hibernate的缓存管理中,也就是说customer对象现在还自由的游荡于Hibernate缓存管理之外。所以我们可以看出自由对象最大的特点就是,在数据库中不存在一条与它对应的记录。
B:持久化对象: Persistent(持久态)
持久化对象就是已经被保存进数据库的实体对象,并且这个实体对象现在还处于Hibernate的缓存管理之中。这是对该实体对象的任何修改,都会在清理缓存时同步到数据库中。如下所示:

Customer customer=new Customer(“zx”,27,images); 
tx=session.beginTransaction(); 
session.save(customer); 
customer=(Customer)session.load(Customer.class,”1”); 
customer.setAge(28); 
tx.commit(); 

 
这时我们并没有显示调用session.update()方法来保存更新,但是对实体对象的修改还是会同步更新到数据库中,因为此时customer对象通过save方法保存进数据库后,已经是持久化对象了,然后通过load方法再次加载它,它仍然是持久化对象,所以它还处于Hibernate缓存的管理之中,这时当执行tx.commit()方法时,Hibernate会自动清理缓存,并且自动将持久化对象的属性变化同步到到数据库中。
C:游离对象: 游离状态---detached
当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录。如下所示:

Customer customer=new Customer(“zx”,27,images); 
tx=session.beginTransaction(); 
session.save(customer); 
customer=(Customer)session.load(Customer.class,”1”); 
customer.setAge(28); 
tx.commit(); 
session.close(); 

 当session关闭后,customer对象就不处于Hibernate的缓存管理之中了,但是此时在数据库中还存在一条与customer对象对应的数据记录,所以此时customer对象处于游离态。
D:三种对象状态之间的转化:
这三种对象状态,是可以相互转化的,一个自由对象可以通过session.save()方法或者session.saveorupdate()方法变成持久化对象,一个持久化对象可以通过session.flush()或者session.evict()方法,移出Hibernate缓存从而转化为游离对象,一个游离对象可以通过再次加载或者调用session.update()方法,再次恢复为持久化对象,也可以通过调用session.delete()方法变成自由对象,并且删除数据库中对应的数据记录。
示例程序:

Configuration cfg = new Configuration(); 
SessionFactory sf=cfg.configure().buildSessionFactory(); 
Customer customer=new Customer(“zx”,27,images);//customer对象处于自由状态 
Session session=sf.openSession(); 
Transaction tx=session.beginTransaction(); 
session.save(customer);//保存后customer对象处于持久化状态 
session.flush();//清空缓存后customer对象处于游离状态 
tx.commit(); 
session.close(); 
Session session2=sf.openSession(); 
Transaction tx2=session2.beginTransaction(); 
session2.update(customer);//通过调用update()方法将游离状态的customer对象,再次转化成持久化状态 
session2.delete(customer);//调用delete()方法后,当清空缓存时,会将customer对象移出缓存,同时会在数据库

 中生成delete事务,来删除customer对象对应的数据记录
tx.commit();
session.close();

分享到:
评论

相关推荐

    精通hibernate源码ch5

    深入到源码层面,我们可以看到Hibernate如何将Java对象转化为SQL语句,以及如何执行这些SQL语句并处理结果。这包括了Hibernate的CriteriaBuilder、QueryExecutor、EntityPersister等关键组件的工作流程。 总结,...

    HiberNate实体

    一、Hibernate实体的状态管理 1. **瞬时状态(Transient)**: 当对象通过`new`关键字创建,但尚未与Session关联时,对象处于瞬时状态。这些对象在内存中存在,但不会被持久化到数据库中,也没有持久化标识。对...

    1对象持久化与hibernate基础共48页.pdf.zi

    在数据库管理系统中,对象持久化是指将程序中的对象状态转化为可以长期存储的形式,以便在后续的运行时能够恢复这些状态。 Hibernate是一种流行的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互,...

    Hibernate\hibernate3.2官方中文参考手册PDF

    9. **实体生命周期**:Hibernate定义了几个关键的实体状态,如瞬时态、持久态、脱管态和临时态,理解这些状态对于理解对象的管理至关重要。 10. **实体的级联操作**:级联操作允许在一个操作中处理关联的对象,例如...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    在Java开发中,它作为对象关系映射(ORM)工具,将复杂的SQL操作转化为对Java对象的操作,从而减轻了开发人员的工作负担。本篇文章主要关注如何通过Hibernate的Session接口来操纵对象,实现数据的持久化。 首先,...

    hibernate jar包

    在Java应用程序中,Hibernate作为一个库,通过引入`hibernate.jar`包,可以实现数据持久化,即将对象状态持久化到关系型数据库中。这个jar包通常包含了Hibernate的核心组件和服务,如实体管理、查询语言、事件监听等...

    [Hibernate雨夜的寂寞原创教程].Hibernate

    9. **实体状态**:Hibernate识别四种实体状态:瞬时、持久化、托管和脱管,理解这些状态对于正确地管理和操作对象至关重要。 10. **实体生命周期**:从新建对象到删除对象,Hibernate会经历一系列的生命周期状态...

    hibernate的文档最全版

    10. **实体状态**:Hibernate区分了瞬态(Transient)、持久化(Persistent)和游离(Detached)三种对象状态,理解这些状态对于正确使用Hibernate至关重要。 11. **查询优化**:Hibernate提供了查询优化策略,如...

    hibernate源码 直接使用

    2. **持久化(Persistence)**: Hibernate负责将实体对象持久化到数据库中,通过@Persit、@Merge、@Remove等操作实现对象的生命周期管理。 3. **会话(Session)**: Hibernate的会话接口是与数据库进行交互的主要...

    hibernate3.3.1框架必要jar包整合

    Hibernate 3.3.1 是一个历史悠久且广泛使用的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为面向对象的代码。这个压缩包文件包含了一系列必要的JAR库,使得开发人员能够轻松地在他们的项目中集成...

    hibernate3.0的文档

    - 对象状态:Hibernate定义了四种对象状态:瞬时态、持久态、脱管态和临时态,理解这些状态有助于正确处理对象的生命周期。 5. **持久化操作**:通过Hibernate的API,可以方便地进行对象的持久化操作,如保存新...

    hibernate资料

    Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员将数据库操作转化为面向对象的方式,极大地简化了Java数据库编程。以下是文档可能包含的一些关键知识点: 1. **对象关系映射(ORM)**:解释了...

    Hibernate培训课程(PPT).ppt

    Hibernate管理的实体对象有三种状态: 1. Transient(自由状态):对象未与任何Session关联,与数据库无直接联系。 2. Persistent(持久状态):对象已保存在数据库中,与当前Session关联,其变化会被持久化到数据库...

    Hibernate 框架

    7. **实体状态管理**:Hibernate将实体分为瞬时态、持久态、游离态和删除态四种状态,理解这些状态对于正确使用Hibernate至关重要。 8. **事务管理**:Hibernate支持编程式事务和声明式事务,确保数据的一致性和...

    EJB怎样实现的实体对象.doc

    1. **数据抽象**:实体对象允许将数据模型转化为面向对象的形式,这样即使数据库结构发生变化,对象之间的关系和行为也能保持稳定。 2. **数据库无关性**:将持久化逻辑封装在对象中,使得应用程序不必直接操作SQL...

    hibernate教程+3.0API

    8. **实体状态管理**:Hibernate识别四种实体状态:瞬时(Transient)、持久化(Persistent)、脱管(Detached)和游离(Detached),这有助于理解对象在生命周期中的行为。 9. **级联操作**:在映射文件或注解中,...

    hibernate5.2.7-src源码

    2. 对象状态管理:Hibernate通过EntityState管理实体对象的状态,如瞬时态、持久态、脱管态等,确保数据的一致性。 3. 查询机制:Hibernate提供HQL(Hibernate Query Language)和Criteria API两种查询方式,此外,...

    精通Hibernate源码.rar

    Hibernate定义了四种实体状态:瞬时态、持久态、游离态和删除态。了解这些状态及其转换,有助于理解对象如何被持久化和管理。 7. **事件监听器与拦截器** Hibernate允许开发者注册事件监听器,如`...

Global site tag (gtag.js) - Google Analytics