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

另一种说法是,Hibernate有四种状态,增加一个removed状态。在一个session实例的缓存中删除时会转化到该状态。

  1. transient

    通过new()创建,不在session的缓存中,也与数据库无关的状态。处在该状态的对象称为临时对象。

  2. persistent

    对象在session缓存区中,数据库中有数据与之对应。

  3. detached

    俗称游离状态,即存在于数据库中,但session中已经不存在该对象。

上图是其三种状态之间的转化,下面我们通过实例来具体看一下。

1、开始——>transient

private static SessionFactory factory;
/**
* 完成sessionFactory的初始化
*/
static{
try{
//读取hibernate.cfg.xml配置文件
Configuration cfg=new Configuration().configure(); //建立sessionFactory,可访问mysql
factory=cfg.buildSessionFactory(); }catch(Exception e){
e.printStackTrace();
}finally{ } } //获得session
public static Session getSession(){
return factory.openSession();
}

获取session对象

            //获取session对象
session = HibernateUtil.getSession();
// 开启
ts = session.beginTransaction(); // Transient状态
user = new User();
user.setName("张三");
user.setPassword("1233");
user.setCreateTime(new Date());
user.setExpireTime(new Date());

执行new()方法之后,对象进入transient状态。对照上图也可以看出,如果接下来不对其进行操作,该对象最终会被垃圾回收,不再是transient状态。

那么接下来,我们对其执行简单的save()操作。

2、transient——>persistent

          // 执行过后,被session管理 Persistent
session.save(user); //修改用户姓名
user.setName("张四"); //commit会把数据与数据库进行同步。
ts.commit();

3、persistent——>detached

关闭session,对象状态由持久化转为游离态。

if(session!=null){
if(session.isOpen()){
session.close();
}
}

4、detached——>persistent

这里,我们通过update()方法实现。

           //再次修改用户名
user.setName("张五");
//获取session对象,与上面类似
session = HibernateUtil.getSession();
// 开启
ts = session.beginTransaction(); // 将session管理
// 变为persistent状态,清理缓存时同步数据库。
session.update(user);
session.getTransaction().commit();

了解Hibernate中对象的三种状态,可以帮助我们对其进行灵活的操作。也可以帮助我们理解他与session缓存、数据库之间的关联。

【SSH】——Hibernate三种状态之间的转化的更多相关文章

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

    本文描述了Hibernate三种状态的概念及互相转化.Java对象的生命周期中有三种状态,而且互相转化.它们分别是临时状态,持久化状态,以及游离状态. AD:WOT2015 互联网运维与开发者大会 热 ...

  2. Hibernate三种状态;query查询;ResultTransformer转换为pojo对象;能够将query语句写在xml中;Criteria查询;ProjectionList总和/f分组等函数

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010026901/article/details/24256091 Session操作过程中的po ...

  3. [转]hibernate三种状态详解

    本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼   分类: hibernate ...

  4. SSH框架之-hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

  5. hibernate三种状态

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

  6. Hibernate三种状态的转换

    hibernate的状态 hibernate的各种保存方式的区(save,persist,update,saveOrUpdte,merge,flush,lock)及 对象的三种状态 hibernate ...

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

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

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

    Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Object ...

  9. hibernate 三种状态的转换

    一.遇到的神奇的事情 使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更 ...

随机推荐

  1. 利用C++中采用面向对象的思想顺序表

    最近在复习数据结构,我用面向对象的思想实现了顺序表,采用C++语言. 首先建立在Visual Studio 2017中建立一个工程,然后新建一个类SqList.然后会生成SqList.h和SqList ...

  2. org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field xxx exceeds its maximum permitted size of 1048576 bytes.

    springboot 通过MultipartFile接受前端传过来的文件时是有文件大小限制的(springboot内置tomact的的文件传输默认为1MB),我们可以通过配置改变它的大小限制 首先在启 ...

  3. 解决百度编辑器ueditor插入视频网址保存不了问题

    问题:如下图,在百度编辑器中插入视频,视频网址可以识别,但是提交内容后视频却显示不了. 解决:这个问题主要是编辑器中会过滤一些html标签,所以可以给标签添加白名单. 修改 ueditor.confi ...

  4. 利用PHP str_replace()函数替换符合百度MIP内容标准

    了解过百度MIP的同学都知道(什么?你不知道什么是百度MIP?就是移动网页加速器鸭

  5. SQL命令(三)

    数据完整性约束 1)数据完整性约束包含:实体完整性.参照完整性.用户定义完整性. CREATE TABLE table( id INT NOT NULL AUTO_INCREMENT PRIMARY ...

  6. OMAPL138制作SD卡启动介质及重装Linux系统

    OMAPL138制作SD卡启动盘及重装Linux系统 手里的创龙的OMAPL138平台的系统SSH坏掉了,我重新移植了openssh还是不好使,没有办法了只能重装OMAPL138的系统了,按照创龙给的 ...

  7. zabbix配置报警媒介-用户-动作-邮件脚本触发mailx邮件报警

    2018-09-16更新,新版本zabbix不需要使用脚本发送邮件,在zabbix web界面直接配置就可以 配置邮件参数,测试发送邮件 确认安装相关服务,centos7默认安装 [root@VM_1 ...

  8. office 总结

    wps word中双击格式刷即可开启永久格式刷

  9. hdu 1394 Minimum Inversion Number(线段树)

    参考:http://blog.sina.com.cn/s/blog_691ce2b70101ldmm.html https://blog.csdn.net/wiking__acm/article/de ...

  10. 【APUE】Chapter13 Daemon Processes

    这章节内容比较紧凑,主要有5部分: 1. 守护进程的特点 2. 守护进程的构造步骤及原理. 3. 守护进程示例:系统日志守护进程服务syslogd的相关函数. 4. Singe-Instance 守护 ...