举例理解Hibernate的三种状态:瞬时态、持久态、托管(即游离态)态及互相转化
初学Hibernate,了解到Hibernate有三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(游离状态)。
它们之间有如下转换图来说明:
1、transient(瞬时状态)。
如上图所示,当new出来一个新对象,还没有保存到数据库中的时候,就是transient状态。
代码表示如下:
1 session=HibernateUtils.getSession(); 2 tx=session.beginTransaction(); 3 //Transient状态 4 User user=new User(); 5 user.setName("Jessica"); 6 user.setPassword("123"); 7 user.setCreateTime(new Date()); 8 user.setExpireTime(new Date()); 9 //********************************************************************** 10 /* 11 * 以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的 12 * 缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象 13 * user就变成了一个Persistent(持久化对象) 14 */ 15 //***********************************************************************
2、persistent(持久化状态)。
当临时状态的对象被执行save之后,就会被session托管,在session中有一个map存放着user对象,也就是说user对象被session引用着,被session纳入管理了。此时的user就处于持久状态了。
1 session=HibernateUtils.getSession(); 2 tx=session.beginTransaction(); 3 //Transient状态 4 User user=new User(); 5 user.setName("Jessica"); 6 user.setPassword("123"); 7 user.setCreateTime(new Date()); 8 user.setExpireTime(new Date()); 9 //********************************************************************** 10 /* 11 * 以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的 12 * 缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象 13 * user就变成了一个Persistent(持久化对象) 14 */ 15 //*********************************************************************** 16 //Persistent状态 17 session.save(user);
3、detached(游离状态)。
当持久状态的对象user,在session关闭之后就会变成有游离状态。
1 Session session=null; 2 Transaction tx=null; 3 4 try { 5 session=HibernateUtils.getSession(); 6 tx=session.beginTransaction(); 7 //Transient状态 8 User user=new User(); 9 user.setName("Jessica"); 10 user.setPassword("123"); 11 user.setCreateTime(new Date()); 12 user.setExpireTime(new Date()); 13 //********************************************************************** 14 /* 15 * 以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的 16 * 缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象 17 * user就变成了一个Persistent(持久化对象) 18 */ 19 //*********************************************************************** 20 //Persistent状态 21 session.save(user); 22 23 //进行修改操作,修改name=“Juyahong” 24 user.setName("Juyahong"); 25 //提交事务 26 tx.commit(); 27 28 } catch (Exception e) { 29 e.printStackTrace(); 30 if (tx != null) { 31 tx.rollback(); 32 } 33 } finally{ 34 35 HibernateUtils.closeSession(session); 36 } 37 38 //detached状态
通过以上例子,可以基本理解了Hibernate的三种状态,其实可以举个例子来说明:我们把数据库比喻成一个登记簿,当我们把信息登记到登记簿上的时候,这个过程就是持久化的过程。当登记完成之后,登记簿上的数据就是持久态数据,所谓持久态就是一直存在的状态。当我们需要用数据的时候,会从登记簿上查信息,我们查到的信息记录在临时的纸张或者脑海里,然后登记簿会放回原位,这时候临时纸张上或者脑海里的数据就是游离态,随时可能被遗忘,在hibernate中就是随时会被销毁的数据。瞬态数据和游离态数据有点儿类似,但是一点,就是他是存在持久化之前的数据,就是说我需要登记个人信息,我的个人信息还没有登记到登记簿上的时候,信息就是瞬态,一旦登记到登记簿上就变成持久态了,然后再查询到的就是游离态。
转载自:http://www.cnblogs.com/jyh317/p/3666566.html
举例理解Hibernate的三种状态:瞬时态、持久态、托管(即游离态)态及互相转化相关推荐
- 图解Hibernate中的三种状态(瞬时态,持久态,游离态|托管态)
注: 1. 瞬时态转化为持久态时,调用save()方法主要是给瞬时态对象赋值id并把该对象保存到session缓存中 2. 持久态转换为游离态主要是把在session缓存中的对象从session ...
- Hibernate对象的三种状态(瞬时态,持久态,游离态)
1. 瞬时状态 (瞬态) 当我们通过Java的新的关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下: 客户客户=新客户("zx",27,图片); 这时客户对象就 ...
- hibernate中对象的三种状态瞬时态,持久态,游离态区分
1.瞬时态. hibernate中什么时候的对象为瞬时态呢,当我们new 一个对象时,还没有save时,它就是瞬时态的,当我们delete一个对象时,它也是瞬时态了,因为此时,他们在数据库中没有对应 ...
- 深入hibernate的三种状态
转载自:http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 学过hibernate的人都可能都知道hibernate有三种状态,transie ...
- (详细)Hibernate查询技术(Query、Session、Criteria),Hibernate的三种状态,Hibernate集合struts2实现登录功能(二)
一.Hibernate的三种查询方式(掌握) Hibernate中提供了三种查询方式: 1)Session的查询:按主键查询查询,方法为get或load 2)Query的查询:使用HQL语句或SQL语 ...
- HIbernate的三种状态
1.瞬时状态(Transient) 通过new创建对象后,对象并没有立刻持久化,他并未对数据库中的数据有任何的关联,此时java对象的状态为瞬时状态,Session对于瞬时状态的java对象是一无所知 ...
- hibernate 的三种状态 如何转化的。
1. 临时状态 由 new命令开辟内存空间的java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系. 2. ...
- 初始Hibernate-关于hibernate的三种状态
2019独角兽企业重金招聘Python工程师标准>>> 瞬时状态: 实体对象是通过java中的new关键字开辟内存空间的java对象,但是它并没有纳入hibernate Sessio ...
- 【SSH】——Hibernate三种状态之间的转化
Hibernate的三种状态为:transient.persistent和detached.对这三种状态的理解可以结合Session缓存,在Session缓存中的状态为persistent,另外两种不 ...
最新文章
- AssetBundle
- 学业水平考试网登录_江西2020年下半年普通高中学业水平考试成绩查询时间及入口...
- 一层循环时间复杂度_数据结构:二叉排序树的前/中/后序遍历(递归与循环两种版本)...
- ES6-Object.is() 和Object.assign()
- 如何判断一个new出来的空对象
- mysql ip地址查询 优化_mysql数据库字段(ip地址,时间)优化
- 关于reactor单线程模型的理解
- 无法进入recovery模式?fastboot来拯救
- 软件设计师:12-下午题历年真题
- 农业大数据中心建设可行性方案
- arm开发板 qt5.6.0 qt使用文泉驿字体
- 基于Java模板技术动态生成Word文档
- WPS 连接 H2 Database
- 双机热备 ip地址_双机热备软件哪个好?双机热备软件推荐
- 三国演义人物出场顺序统计(文本词频统计)
- CSDN代码块背景色的调整
- 本周杭州程序员工资大调查,高于深圳和广州
- Quartz简介及初始化
- C++String fing函数
- 语雀全新模板中心,你的创作锦囊