hibernate对象的三种状态及转换

hibernate对象的三种状态转换关系图

        

三种状态

瞬时状态(transient):

  通过new创建对象后,对象并没有立刻持久化,  它并未参与数据库中的数据有任何的关联,此时java对象的状态为瞬时状态。session对瞬时状态的对象一无所知,当对象不再被引用时,她的数据也就丢失了, 对象将会被java虚拟机按照垃圾回收机制处理。

持久状态(persistent):

  当对象与session关联,被session管理时,它就处于持久化状态。处于持久状态的对象拥有数据库的标志。对象什么时候与session建立联系的?

(1)通过session查询的接口,或者get,或者load方法从数据库中加载对象的时候

(2)瞬时状态的对象,通过调用save或者saveorupdate方法时处于持久状态的对象,session会持续跟踪和管理他们,如果对象的内部状态发生了任何更改,hibernate会选择合适的时机(如事务提交时)将变更固化到数据库中。

游离状态(Detached):

处于持久状态的对象,脱离与其session 的管理后,对象就处于游离状态。  执行session的evict,clear,close()方法后,可以将持久状态变为游离状态

session提供了两个方法(update,merge)将处于游离状态的对象,与一个新的session关联,此时对象的状态就重新变回持久状态。

状态转换:

1.瞬时状态转换为持久状态

   使用session的save()或者saveorupdate()方法保存对象后,变为持久状态

   使用session对象的get或者load方法获取对象,,该对象的状态是持久状态。

2.持久状态转为瞬时状态

执行session的delete()后,变为瞬时状态

3.持久状态转换为游离状态

执行了session的evict(),clear()或者close()方法后

4.游离状态转为持久状态

重新获取session对象,执行session对象的update或者saveorupdate()后,变为持久状态

5.游离状态转为瞬时状态

执行session的delete()后,对象有游离状态转为瞬时状态。

状态前后发生变化的对象称为脏对象

脏检查: 提交事务的时候,hibernate会对session中持久状态的对象检查,看数据是否发生了变化

目的: 保证内存中的数据对象和数据库表的数据一致

刷新缓存机制:

  1.执行事务的commit方法的时候,可以刷新缓存

  2. 执行session.flush()方法

 

时间: 2024-12-21 00:14:38

hibernate对象的三种状态及转换的相关文章

Hibernate对象的三种状态

hibernate中对象的状态有三种:临时态(Transient).持久态(Persistent)和游离态(Detached),三种状态转化的方法都是通过session来调用的,处于三种状态下的对象所具有的特点,总结如下: 临时态:没有被session管理 在数据库中没有与之匹配的记录; 持久态:纳入session管理 在数据库中有与之匹配的记录 当属性发生变化,在清理缓存时(脏数据检查)会自动和数据库同步; 游离态:没有被session管理 在数据库中存在与之匹配的记录. 临时态到持久态的方法

Hibernate 对象的三种状态

对象在第一种状态 Teacher t = new Teacher(); t.setName(“张三”); t.setAge(35); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); 对象在第二种状态 session.save(t); session.getTransaction().commit(); 对象在第三种状态,在commit之后. 1.transient: 内存中新new

Hibernate对象的三种状态是什么?

瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态 由new命令开辟内存空间的java对象, eg. Person person = new Person(”amigo”, “女”); 如果没有变量对该对象进行引用,它将被java虚拟机回收. 瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在H

分享知识-快乐自己:Hibernate对象的三种状态

图解: 1):瞬时状态(Transient) 对象与session没有关联,数据库中没有对应的数据. 一般new出来的对象便是瞬时对象. 对瞬时对象使用save()方法便使之成为持久对象. 由于数据库中没有对应的数据,所以对瞬时对象使用update()方法无效. 2):持久状态(Persistent) 对象与session有关联,且数据库中有对应id的数据. 使用get().load()等方法获得的是持久对象. 对瞬时对象使用save()方法便使之成为持久对象. 对游离对象使用update()方

hibernate对象的三种状态的简单理解

1.  transient:对象首先被new出来的时候:这是它存在内存中,缓存中没有,没有ID,数据库中也没有 2.  persistent:对象再执行save()方法后, Session用一个Map<id,对象引用>保存在缓存中,并保存在数据库中,所以ID有,内存(缓存)有,数据库有. 3.  datached:在Session执行close()方法后,缓存中的Map被清除,所以对象与数据库失去联系,它有ID,在内存有,缓存中没有,数据库中有.

Hibernate(六)__对象的三种状态

瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象. 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交: 持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到). (当对象save后,会将数据持久化,这时obj.set()后再提交事务hibernate会检测到数据的修改. 而如果在save这个对象之前(即

Hibernate持久化对象的三种状态

在Hibernate中,持久化对象在被操作的过程中可以分为三个时期,这三个时期是和Session的周期相关的,因为Hibernate中的操作都是基于Session完成的.Session的特定方法能使对象从一个状态转换到另一个状态. 持久化对象的生命周期有三种,瞬时状态.持久状态和分离状态.如下图: 瞬时态 不曾进行持久化,未与任何Session相关联.此状态的对象是用new关键字创建出来的,此时对象没有和数据库中记录对应. //Transient状态 Useruser = new User();

Hibernate 入门 04 - Hibernate中Java对象的三种状态

目录:(后续不断更新...) Hibernate 入门 01 - 框架技术 (介绍Hibernate框架的发展由来) Hibernate 入门 02 - Hibernate介绍及其环境搭建 Hibernate 入门 03 - 使用Hibernate完成持久化操作 Hibernate 入门 04 - Hibernate中Java对象的三种状态 ▁▃▅ Hibernate中Java对象的三种状态▅▃▁ 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久

Hibernate之对象的三种状态

Hibernate之Java对象的三种状态 一.简述 本博文大部分的思想和内容引子CSND上名为 FG2006 这位大神的文章,连接地址为:http://blog.csdn.net/fg2006/article/details/6436517.在此表示歉意和深深的谢意.如若各位读者在阅读的过程中发现有任何的纰漏或者错误,请及时之处,本人不胜感激, Hibernate中对象有三种状态: 临时状态(Transient).持久状态(Persistent).游离状态(Detached). 临时状态:刚刚