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. css3 RGBA 红色R+绿色G+蓝色B+Alpha通道

    语法: R:红色值.正整数 | 百分数 G:绿色值.正整数 | 百分数 B:蓝色值.正整数| 百分数 A:透明度.取值0~1之间 取值: <length>:Hue(色调).0(或360)表 ...

  2. ABAP术语-Object Name

    Object Name 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/05/1091092.html An object name is a ...

  3. Mysql存储过程查询结果赋值到变量

    # 使用的navicat  编辑的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_student_back`()BEGIN#定义max ...

  4. Win10家庭版卸载Mysql 8.0.13实录

    因为重度嫌弃Mysql 8.0.xxx的各种妖魔鬼怪,所以想卸载了.但是,百度了很多文章,日期也是近几个月,但是却并不适用.所以特写此文记录一下. 按照百度万金油通用第一步,就是要停止MySQL的服务 ...

  5. tidb损坏tikv节点怎么恢复集群

    tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete  store_id .数据一般可以正常访问,但是如 ...

  6. DISTINCT 去重仍有重复的分析

    logger日志报错 插入数据时违反主键唯一约束 org.springframework.dao.DuplicateKeyException: ### Error updating database. ...

  7. CentOS7版本基础使用

    第1章 CentOS7的使用 1.1 为什么要使用CentOS7版本 CentOS7是在CentOS6基础上发布的新版本,与之前的版本相比,主要的更新包括: 1.内核更新到3.10.0 2.支持Lin ...

  8. Hello,移动WEB—Viewport_Meta标签

    二   Viewport meta标签: 语法:<meta name="viewport" content="name=value, name=value" ...

  9. 【PBR的基本配置】

    PBR基于策略路由的配置 一:基于报文协议的本地PBR 1:首先进行理论分析:在SW1上利用基于报文报文协议类型的PBR,在sw1与sw3的连接链路上,利用acl制定允许tcp的报文通过3000,并与 ...

  10. echarts实用小技巧,控制字符串长度,限定整数等

    限定横坐标文本字符长度 xAxis : [ axisLabel:{ formatter: function (value) { var maxlength=6; if (value.length> ...