博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
举例理解Hibernate的三种状态
阅读量:7128 次
发布时间:2019-06-28

本文共 3703 字,大约阅读时间需要 12 分钟。

  初学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://cihel.baihongyu.com/

你可能感兴趣的文章
使用OpenSessionInViewFilter解决session关闭问题
查看>>
lvs基本使用
查看>>
我的友情链接
查看>>
Liferay 用本地私服(nexus) 打包部署Portlet应用
查看>>
敏捷软件开发实践-Code Review Process
查看>>
liunx环境下的oracle安装
查看>>
手把手教你使用Newstart HA
查看>>
JAVA多线程问题【2】 synchronized锁机制
查看>>
redis 安装配置
查看>>
案例2
查看>>
手动挂载分区
查看>>
键盘通知
查看>>
构建自己的词典库
查看>>
Graph Data Structures for Beginners
查看>>
@NotNull, @NotEmpty和@NotBlank
查看>>
使用jQuery的ajax实现同步获取返回值
查看>>
HBase 优化,columnFamily和qualifierColumn的设计原则
查看>>
java中Arraylist复制方法
查看>>
关于Kafka 的 consumer 消费者手动提交详解
查看>>
生成excle表格
查看>>