Hibernate持久化对象的三种状态

在Hibernate中,持久化对象在被操作的过程中可以分为三个时期,这三个时期是和Session的周期相关的,因为Hibernate中的操作都是基于Session完成的。Session的特定方法能使对象从一个状态转换到另一个状态。

持久化对象的生命周期有三种,瞬时状态、持久状态和分离状态。如下图:

瞬时态

不曾进行持久化,未与任何Session相关联。此状态的对象是用new关键字创建出来的,此时对象没有和数据库中记录对应。

  //Transient状态
Useruser = new User();
user.setName("张三");
user.setPassword("123");
user.setCreateTime(newDate());
user.setExpireTime(newDate());

持久态

持久化,当前与Session相关联。

//Persistent状态
session.save(user);
user.setName("李四");

tx.commit();

通过Session对象的save()方法进行保存对象后,该对象变为持久态。也就是存在Session中了,并且在数据库中存在一条记录。但是数据只有在commit之后才会存到数据库中。在本示例中,调用了提交了commit()方法后,用户的名称由张三变成李四。

如同例子,瞬时对象通过save,saveOrUpdate等方法成为持久态;此外对象通过Session的get()或者是load()等方法直接成为持久态;游离态对象通过update,saveOrUpdate成为持久态。

持久化特征:

持久实例是任何具有数据库标识的实例。它具有持久化管理器Session统一管理,持久实例实在事务中进行操作的。

(1)位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。

(2) 持久化对象和数据库中的相关记录对应。

(3)Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。

游离态

之前进行持久化,但当前未与任何Session相关联。

  //Persistent状态
session.save(user);
user.setName("李四");

tx.commit();
//detached状态
user.setName("王五");

如上例子,脱离持久态之后,再想改变用户的名称已经不可能了,只有再回到持久态去更新用户的姓名才能把姓名更新到数据库中。所以游离态不能影响数据库中数据的变化。

游离态只能由持久态转换而来。

游离对象与瞬时对象:游离对象与瞬时对象的相似之处在于,都与Session没有关联,游离对象是由持久对象转换来的,所以数据库中可能有对应记录,瞬时对象在数据库中没有对应记录。

综上所述,发现处于瞬时态和游离态的对象不在Session管理中,无论怎样修改对象属性都不会影响数据库中的数据。而当对象处于持久态的时候,对对象的修改只有在执行commit()方法时,数据库中的数据才会同步更新。

Hibernate持久化对象的三种状态,布布扣,bubuko.com

时间: 2024-12-26 11:10:56

Hibernate持久化对象的三种状态的相关文章

【hibernate进阶】hibernate持久化对象的三种状态

Hibernate持久化对象的三种状态:瞬时对象(Transient Objects),持久化对象(Persist Objects),离线对象(Detached Objects). 三种状态:    瞬时对象(Transient Objects):使用new 操作符初始化的对象不是立刻就持久的.它们的状态是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不在引用这些对象(不再被任何其他对象所引用),它们的状态将会丢失,并由垃圾回收机制回收. 持久化对象(Persist Objects

Hibernate之对象的三种状态

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

JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

对象的三种状态 瞬时状态: 实体 没有id.没有与session关联 持久化状态: 特点:持久化状态对象的任何改变都会同步到数据库中 游离态[也称作托管态]: 实体 有id,没有与session关联 Hibernate向数据库中增加用户调用addUser()方法时 //增加用户 public void addUser() { //得到配置信息 Configuration config = new Configuration().configure(); //创建sessionFactiory对象

Hibernate中对象的三种状态,以及三种状态间的转化方法

在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来被别人问到了,说是面试题,才发现它是重要的.对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化. Hibernate三种状态之一:临时状态(Transient):也叫瞬时状态,在一个对象刚被创建的时候,比如People people = new People(),它没有持久化,并没有处于Session的缓存中,这种状态的对象叫就是临时对象: Hiberna

Hibernate中对象的三种状态

一  . 在hibernate中,对象有三种状态:临 时状态(Transient).持久状态(Persistent)和游离状态(Detached). 处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject). 1. 临时状态 由 new命令开辟内存空间的Java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系. (a) 如 果没有变量对该对象进行

hibernate实体对象的三种状态:自由状态,持久状态,游离状态.

自由态与游离态的区别: 当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它 对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录 (1)自由状态(Transient) 特性: ①不在Session的缓存中,不与任何的Session实例相关联. ②在数据库中没有与之相对应的记录. (2)持久状态(Persistent) 特性 ①在Session

hibernate中对象的三种状态:Transient、Persistent和Detached

1 public class ThreeState { 2 public static void main(String[] args) { 3 User u = new User(); //属性:id(对应数据库递增字段),name,age 4 u.setName("cbirdq"); 5 u.setAge(20); 6 //堆内存有u,session缓存没有u,数据库没有u,没有id 7 8 Session session = sessionFactory.getCurrentSe

Hibernate对象的三种状态

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

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati