Hibernate——三种状态的实例persistent演示

上篇博客介绍了自己对Hibernate三种状态的理解,这一篇主要是通过实例演示去进一步的理解三种状态。

persistent状态:

此时的状态持久化对象纳入的session的管理,当提交事物时,数据会和数据库同步,如果有更新的数据将产生更新语句。

			session=HibernateUtils.getSession();
			tx=session.beginTransaction();

			//transient状态,此时的对象没有纳入session管理
			user=new User();
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());

			//persistent状态
			//persistent状态的对象当对象的属性发生改变的时候
			//hibernate清理缓存(脏数据)的时候,会和数据库同步。
			session.save(user);

			user.setName("李四");
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			if (tx!=null) {
				tx.rollback();
			}
		}finally{
			HibernateUtils.closeSession(session);  //关闭session此时是datached状态
		}

产生的SQL语句:

datached状态:

此时的状态不被数据库管理,但是在数据库中存在相应的数据。在此状态下重新拿一个session进行提交会将状态重新变为persistent状态,会将数据在数据库中更新。

		try {
			session=HibernateUtils.getSession();
			tx=session.beginTransaction();

			//transient状态
			user=new User();
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());

			//persistent状态
			//persistent状态的对象当对象的属性发生改变的时候
			//hibernate清理缓存(脏数据)的时候,会和数据库同步。
			session.save(user);

			user.setName("李四");
			tx.commit();
		} catch (Exception e) {
			e.printStackTrace();
			if (tx!=null) {
				tx.rollback();
			}
		}finally{
			HibernateUtils.closeSession(session);
		}
		//datached状态,重新拿一个session进行提交。
		user.setName("王五");
		try {
			session=HibernateUtils.getSession();
			session.beginTransaction();
			//将datached状态的对象重新纳入session的管理
			//此时将变为persistent状态对象
			session.update(user);
			session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}

产生的SQL语句:

总之,在persistent状态时会将对象纳入到session的管理,无论对象是插入还是更新都会就将最后的数据同步到数据库,并产生相应的sql语句;当关闭session时处于datached状态,此时如果重新开启一个session会将对象重新纳入到session中,当session提交会将数据提交,并产生对应的更新sql语句。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 10:58:17

Hibernate——三种状态的实例persistent演示的相关文章

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 ----转----

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态         由new命令开辟内存空间的java对象, eg. Person person = new Person(

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态         由new命令开辟内存空间的java对象, eg. Person person = new Person(

简单理解Hibernate三种状态的概念及互相转化

本文描述了Hibernate三种状态的概念及互相转化.Java对象的生命周期中有三种状态,而且互相转化.它们分别是临时状态,持久化状态,以及游离状态. AD:WOT2015 互联网运维与开发者大会 热销抢票 在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的.对于理解hibernate,JVM和sql的关系有更好的理解.对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化. Hibernate

Hibernate 三种状态理解及转换

首先先说下hibernate中的三个状态,只有完全理解了这三个状态,才能在项目中充分利用hibernate这个工具来完成项目进度. 1.瞬时态,也叫临时态等,不受hibernate session管制的状态,即某个实例跟session没有任何关联,比如new产生的实例. 2.持久态,session中持久化了的实例,相当于数据库中的记录,修改实例的任何属性都会导致数据库记录的变更. 3.托管态,也叫游离态等,持久化对象脱离了Session的对象.如Session缓存被清空的对象.特点:已经持久化,

Hibernate三种状态,缓存,以及update更新问题

一. Hibernate中对象的三种状态 1. 瞬时状态(transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,此时该对象只是通过JVM获得了一块内存空间,还并没有通过Session对象的save()方法保存进数据库,因此也就还没有纳入Hibernate的缓存管理中,也就是说该对象现在还自由的游荡于Hibernate缓存管理之外.所以我们可以看出自由对象最大的特点就是,在数据库中不存在一条与它对应的记录. 瞬时状态特点: I: 不和 Sess

Hibernate三种状态的转换

hibernate的状态 hibernate的各种保存方式的区(save,persist,update,saveOrUpdte,merge,flush,lock)及 对象的三种状态 hibernate 的保存 hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别. 一.预备知识 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient[自由态].persistent[持久化状态].detached[游离态] 下边是常见的翻译办法

Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用 引自http://www.blogjava.net/TiGERTiAN/archive/2008/10/25/236519.html

Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object). 瞬时态         由new命令开辟内存空间的java对象, eg. Person person = new Person("xxx", "xx"); 如果没有变量对该对象进行引用,它将被java虚拟机

hibernate三种状态

学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别,比如瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就是已经被保存到数据库中,离线状态就是数据库中有,但是session中不存在该对象.但是大家又是否对hibernate的session的那几个特殊方法一清二楚呢?或者说大家是否能够一眼就快速看出一个测试用例在反复的调用sess

4、Hibernate三种状态的讲解

Hibernate常见的三种状态的讲解: Transient : 瞬时的状态,new出来的对象,即没有被持久化,也不存在Session缓存中. Persistent:持久化的状态,数据库中有,并且也在session缓存中中. Detached :离线状态,指的是,已经被持久化,既数据库中有:但是不在session范围中. 一般是session.close(),session关闭了或者是session.clear(),session清空了缓存.