初学Hibernate,了解到Hibernate有三种状态:transient(瞬时状态),persistent(持久化状态)以及detached(游离状态)。

  它们之间有如下转换图来说明:

  

  1、transient(瞬时状态)。

  如上图所示,当new出来一个新对象,还没有保存到数据库中的时候,就是transient状态。

  代码表示如下: 

             session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态
User user=new User();
user.setName("Jessica");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//**********************************************************************
/*
* 以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的
* 缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象
* user就变成了一个Persistent(持久化对象)
*/
//***********************************************************************    

  2、persistent(持久化状态)。

  当临时状态的对象被执行save之后,就会被session托管,在session中有一个map存放着user对象,也就是说user对象被session引用着,被session纳入管理了。此时的user就处于持久状态了。

             session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态
User user=new User();
user.setName("Jessica");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//**********************************************************************
/*
* 以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的
* 缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象
* user就变成了一个Persistent(持久化对象)
*/
//***********************************************************************
//Persistent状态
session.save(user);                                                                                                   

  3、detached(游离状态)。

 

  当持久状态的对象user,在session关闭之后就会变成有游离状态。

         Session session=null;
Transaction tx=null; try {
session=HibernateUtils.getSession();
tx=session.beginTransaction();
//Transient状态
User user=new User();
user.setName("Jessica");
user.setPassword("123");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
//**********************************************************************
/*
* 以上user就是一个Transient(瞬时状态),此时user并没有被session进行托管,即在session的
* 缓存中还不存在user这个对象,当执行完save方法后,此时user被session托管,并且数据库中存在了该对象
* user就变成了一个Persistent(持久化对象)
*/
//***********************************************************************
//Persistent状态
session.save(user); //进行修改操作,修改name=“Juyahong”
user.setName("Juyahong");
//提交事务
tx.commit(); } catch (Exception e) {
e.printStackTrace();
if (tx != null) {
tx.rollback();
}
} finally{ HibernateUtils.closeSession(session);
} //detached状态

  通过以上例子,可以基本理解了Hibernate的三种状态,其实可以举个例子来说明:我们把数据库比喻成一个登记簿,当我们把信息登记到登记簿上的时候,这个过程就是持久化的过程。当登记完成之后,登记簿上的数据就是持久态数据,所谓持久态就是一直存在的状态。当我们需要用数据的时候,会从登记簿上查信息,我们查到的信息记录在临时的纸张或者脑海里,然后登记簿会放回原位,这时候临时纸张上或者脑海里的数据就是游离态,随时可能被遗忘,在hibernate中就是随时会被销毁的数据。瞬态数据和游离态数据有点儿类似,但是一点,就是他是存在持久化之前的数据,就是说我需要登记个人信息,我的个人信息还没有登记到登记簿上的时候,信息就是瞬态,一旦登记到登记簿上就变成持久态了,然后再查询到的就是游离态。

举例理解Hibernate的三种状态的更多相关文章

  1. 举例理解Hibernate的三种状态(转)

    转自:https://blog.csdn.net/yiguang_820/article/details/79073152 初学Hibernate,了解到Hibernate有三种状态:transien ...

  2. Hibernate的三种状态及对象生命周期

        理解Hibernate的三种状态,更利于理解Hibernate的运行机制,这些可以让你在开发中对疑点问题的定位产生关键性的帮助. 三种状态 临时状态(Transient):在通过new关键字, ...

  3. 第五讲:深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  4. [转]深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  5. 深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  6. 深入hibernate的三种状态(转)

    hibernate的三种状态: 瞬时对象,持久化对象,托管对象. hibernate的两级缓存:1>一级缓存:session    2>二级缓存:sessionfactory. 瞬时对象: ...

  7. hibernate的三种状态(儿)

    第五讲:hibernate的三种状态 瞬时:bean对象与session,与数据库无关.在session对象的save方法保存之前. 持久状态(托管):bean对象与session有关,数据库中有对应 ...

  8. hibernate的三种状态和缓存

    hibernate的三种状态: 1.瞬时态:对象里面没有id值,对象与session没有关联 类似,把class类new出来,不存进session 2.持久态:对象里面有id值,对象与session关 ...

  9. 【转】hibernate对象三种状态

    hibernate里对象有三种状态: 1,Transient 瞬时 :对象刚new出来,还没设id,设了其他值. 2,Persistent 持久:调用了save().saveOrUpdate(),就变 ...

随机推荐

  1. loadrunner文本检查点

    将脚本切换回代码界面, 在光标闪烁的上行,添加如下的代码: 添加的代码根据你检查的方式不同而不同, 你可以选择其中之一即可. 代码一: web_reg_find("Text=Payment ...

  2. 微服务之springCloud-config-bus(十三)

    简介 当我们的业务系统越来越庞大复杂的时候,各种配置就会层出不群.一旦配置修改了,那么我们就是必须修改后停服务,然后再上线,如果服务少,我们可以手动来操作,如果是成千上百的服务,如果是手动操作,肯定就 ...

  3. [Linux实用工具]Windows下同步Linux文件(Linux安装Samba和配置)

    场景需求: 安装了Ubuntu在虚拟机上,但是代码编辑或者其它更多的操作的时候,还是习惯在windows下进行.如果windows下编辑完再上传到服务器,再编译执行,就太繁琐了.一次两次还好说,这编译 ...

  4. 通过USB连接越狱iPhone,SSH进入设备

    通过USB连接越狱iPhone,SSH进入设备html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .Co ...

  5. 9g10在nandflash扇区的分配地址

  6. 将安卓手机短信导入到iPhone6 plus中

    不越狱的情况下短信不能直接同步到iphone手机,视频.图片.联系人可以直接使用itools的手机搬家功能超方便从android到iphone中.短信得变通的处理才能导入. 工具: 安卓手机iPhon ...

  7. FileZilla等软件搭建ftp服务器

    一.常用的几款ftp服务器软件介绍 1.1 Server-U Serv-U是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K/2000/xp等全Windows系列.可以设定多个FT ...

  8. 为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰

    大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { priv ...

  9. native-base中icon不能正确显示[转]

    初次接触native-base,在使用它的Icon组件的时候碰到了一个问题:图标没能正确显示!(在expo调试模式下是正常的) native-base官网给的使用Icon的例子 怎么找到适合我的图标呢 ...

  10. PDFSharp生成PDF.

    在上面用OpenXML生成word后,原来利用Word2010里的导出成PDF功能就不能用. 然后找开源组件生成PDF,最开始用的是iTextSharp,做完导出报表了才发现,这个开源协议用的是AGP ...