举例理解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的三种状态:瞬时态、持久态、托管(即游离态)态及互相转化相关推荐

  1. 图解Hibernate中的三种状态(瞬时态,持久态,游离态|托管态)

    注:  1.  瞬时态转化为持久态时,调用save()方法主要是给瞬时态对象赋值id并把该对象保存到session缓存中 2.  持久态转换为游离态主要是把在session缓存中的对象从session ...

  2. Hibernate对象的三种状态(瞬时态,持久态,游离态)

    1.  瞬时状态 (瞬态) 当我们通过Java的新的关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下:  客户客户=新客户("zx",27,图片); 这时客户对象就 ...

  3. hibernate中对象的三种状态瞬时态,持久态,游离态区分

     1.瞬时态. hibernate中什么时候的对象为瞬时态呢,当我们new 一个对象时,还没有save时,它就是瞬时态的,当我们delete一个对象时,它也是瞬时态了,因为此时,他们在数据库中没有对应 ...

  4. 深入hibernate的三种状态

    转载自:http://www.cnblogs.com/xiaoluo501395377/p/3380270.html 学过hibernate的人都可能都知道hibernate有三种状态,transie ...

  5. (详细)Hibernate查询技术(Query、Session、Criteria),Hibernate的三种状态,Hibernate集合struts2实现登录功能(二)

    一.Hibernate的三种查询方式(掌握) Hibernate中提供了三种查询方式: 1)Session的查询:按主键查询查询,方法为get或load 2)Query的查询:使用HQL语句或SQL语 ...

  6. HIbernate的三种状态

    1.瞬时状态(Transient) 通过new创建对象后,对象并没有立刻持久化,他并未对数据库中的数据有任何的关联,此时java对象的状态为瞬时状态,Session对于瞬时状态的java对象是一无所知 ...

  7. hibernate 的三种状态 如何转化的。

    1. 临时状态  由 new命令开辟内存空间的java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系.   2. ...

  8. 初始Hibernate-关于hibernate的三种状态

    2019独角兽企业重金招聘Python工程师标准>>> 瞬时状态: 实体对象是通过java中的new关键字开辟内存空间的java对象,但是它并没有纳入hibernate Sessio ...

  9. 【SSH】——Hibernate三种状态之间的转化

    Hibernate的三种状态为:transient.persistent和detached.对这三种状态的理解可以结合Session缓存,在Session缓存中的状态为persistent,另外两种不 ...

最新文章

  1. AssetBundle
  2. 学业水平考试网登录_江西2020年下半年普通高中学业水平考试成绩查询时间及入口...
  3. 一层循环时间复杂度_数据结构:二叉排序树的前/中/后序遍历(递归与循环两种版本)...
  4. ES6-Object.is() 和Object.assign()
  5. 如何判断一个new出来的空对象
  6. mysql ip地址查询 优化_mysql数据库字段(ip地址,时间)优化
  7. 关于reactor单线程模型的理解
  8. 无法进入recovery模式?fastboot来拯救
  9. 软件设计师:12-下午题历年真题
  10. 农业大数据中心建设可行性方案
  11. arm开发板 qt5.6.0 qt使用文泉驿字体
  12. 基于Java模板技术动态生成Word文档
  13. WPS 连接 H2 Database
  14. 双机热备 ip地址_双机热备软件哪个好?双机热备软件推荐
  15. 三国演义人物出场顺序统计(文本词频统计)
  16. CSDN代码块背景色的调整
  17. 本周杭州程序员工资大调查,高于深圳和广州
  18. Quartz简介及初始化
  19. C++String fing函数
  20. 语雀全新模板中心,你的创作锦囊

热门文章

  1. Windows程序设计【1】 第一个Windows程序 | 九七的Windows开发
  2. 【每日英文】2021.8.14
  3. 一文学会zigbee
  4. 计算机软件编程英语词汇表
  5. 泛微E8流程导入操作
  6. 20220910编译ITX-3588J的Buildroot的系统1(编译uboot)
  7. “手写识别”实例介绍
  8. 为什么部分人友善但独来独往(关于人际关系的一点思考)
  9. 使用pxe安装uos系统
  10. 【翻译】使用普罗米修斯操作员的新手指南