-临时状态:刚用new语句创建对象,还没有被持久化,并且不处于Session缓存中。处于临时状态的java对象被称为临时对象。

-持久化状态:已经被持久化,并且加入到Session的缓存中。处于持久化状态的java对象被成为持久化对象。

-游离状态:已经被持久化,但不再处于Session的缓存中。处于游离状态的java对象被成为游离对象。

     //对象状态转换的过程
Transaction ts=session.beginTransaction();
User user =new User(); //临时状态
user.setName("tom");
user.setPassword("123456"); session.save(user); //转变为持久化状态
ts.commit(); //持久化状态 session.close(); //转变为游离状态
sessionfactory.close();
System.out.println(user.getName()); //游离状态
临时对象的特征:
-OID为null
-不处于Session的缓存中,也可以说,不被任何一个Session实例关联
-在数据库中没有对应的记录 持久化对象的特征:
-OID不为null
-位于一个Session实例的缓存中,持久化对象总是被一个Session实例关联
-持久化对象和数据库中的相关记录对应
-会根据持久化对象的属性变化,同步更新数据库。
User user=(User)session.get(User.class,1);//获取持久化对象 持久状态
user.setName("jerry");
transaction.commit();
我们发现我们没有执行update语句,却打印了update语句。Hibernate会自动将持久化对象的状态同步到数据库中。 游离对象的特征:
-OID不为null
-不再位于Session的缓存中,也可以说,游离对象不被Session关联
-数据库中有对应的记录

三种状态的转换

    1)临时状态转换持久化状态
-Session的save()方法会将临时状态转换成持久状态。
把要保存的对象放入Session缓存中,使它进入持久化状态。使用映射文件指定的主键生成策略,为持久化对象分配唯一OID。
save方法只是为对象分配UID。我们可以在save方法处打断点。
当我们的主键生成策略为native时,由于我们使用mysql数据库,主键自增,所以执行完save方法后,打印insert语句,mysql数据库为我们对象自增OID
当我们的主键生成策略为incrementt时,increment是由Hibernate维护,先去表中查最大ID然后+1,我们执行完save方法之后,发现打印select查找最大id的语句,
       执行commit时才打印插入语句 2)临时状态转换成游离状态
-将临时状态的对象OID设置为数据库中对应的记录.
User user=new User();
user.setId(1); 3)持久化状态转换成临时状态
第一种:
User user=(User)session.get(User.class,1);//获取持久化对象 持久状态
session.close(); //游离状态
user.setId(null);//临时状态
第二种:
User user=(User)session.get(User.class,1);//获取持久化对象 持久状态
session.evict(user); //游离状态,此方法会将session缓存中清除持久化对象,使其变为游离状态
user.setId(null);//临时状态 4)持久化状态转换成游离状态
第一:调用session的close方法,持久化状态变为游离状态
第二: 调用session的evict()方法方法,将持久状态转变为游离状态 5)游离状态转换成临时状态
只需要将游离状态的对象OID变为null。 6)游离状态转换成持久状态
Session的update()方法使游离状态转换成持久状态。
User user=(User)session.get(User.class,1);//获取持久化对象 持久状态
session.evict(user); //游离状态,此方法会将session缓存中清除持久化对象,使其变为游离状态
session.update(user);

Java对象在Hibernate持久化层的状态的更多相关文章

  1. java对象在hibernate持久层的状态

    站在持久化层的角度,一个java对象在它的生命周期中,可处于以下4个状态之一: 临时状态(transient):刚刚用new语句创建,还没有被持久化,并且不处于Session的缓存中. 持久化状态(p ...

  2. [转]Java 对象锁-synchronized()与线程的状态与生命周期

      线程的状态与生命周期 Java 对象锁-synchronized() ? 1 2 3 4 synchronized(someObject){   //对象锁 } 对象锁的使用说明: 1.对象锁的返 ...

  3. 《精通Hibernate:Java对象持久化技术详解》目录

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  4. Hibernate 系列 07 - Hibernate中Java对象的三种状态

    引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...

  5. java框架篇---hibernate入门

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDB ...

  6. Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征

    以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. sess ...

  7. Hibernate持久化对象状态

    在Hibernate中,持久化对象再被操作过程中分为三个时期.这三个时期和session周期相关. 各自是瞬时(Transient),持久太(persistent)和游离态(Detached) 瞬时状 ...

  8. (转)Hibernate框架基础——Java对象持久化概述

    http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构  说明 ...

  9. Hibernate中Java对象的三种状态

                                                                                     Hibernate中Java对象的三种 ...

随机推荐

  1. 【原创】Java基础之Freemarker(1)模板加载及清空机制

    一 freemarker加载模版机制 freemarker中的配置项template_update_delay表明模版的缓存时间,单位是s,超过缓存时间则从磁盘加载最新的模版,具体细节如下: 1)fr ...

  2. 【原创】大叔问题定位分享(27)spark中rdd.cache

    spark 2.1.1 spark应用中有一些task非常慢,持续10个小时,有一个task日志如下: 2019-01-24 21:38:56,024 [dispatcher-event-loop-2 ...

  3. Python-Django 模板层

    1 模版简介 DTL:django模板语言 核心: 变量 {{ }} 标签 {% %} 2 模版语法之变量 -变量渲染:{{变量}} -变量深度查询:{{变量.索引/key值/方法}} <h2& ...

  4. 加密:HashUtils,RSAUtil,AESUtils

    import java.security.MessageDigest; public class HashUtils { public static String getMD5(String sour ...

  5. docker hub加速访问设置

    前言:docker是国外的,虽然有个版本开源免费,但是其docker  hub还是在国外,刚刚安装后,拉镜像就会发现,连接请求超时,中断服务,这是因为防火墙的问题,所以要将源指向国内的知名docker ...

  6. bootstrap-datetimepicker的中文显示问题

    bootstrap-datetimepicker的本地化显示依赖于moment插件.也就是说moment插件提供了多语言的内容支持,而bootstrap-datetimepicker没有语言内容. 为 ...

  7. 集腋成裘-09-ECharts -HelloECharts-02

    上一篇我们讲了可视化数据分析的重要性以及ECharts的一些的特性,这一篇我们继续学习一下ECharts的简单Demo 一:5 分钟上手 ECharts <!DOCTYPE html> & ...

  8. 蒙特卡诺近似与PBM

    介绍蒙特卡诺近似的例子代码 #include<fstream> #include<iostream> #include<cstdlib> #include<c ...

  9. CodeForces 553E Kyoya and Train 动态规划 多项式 FFT 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8847145.html 题目传送门 - CodeForces 553E 题意 一个有$n$个节点$m$条边的有向图 ...

  10. 程序猿最浪漫的表白,肯定会得到你的她——Jason niu 原文来自GitHub,本人已部分修改

    程序猿最浪漫的表白,肯定会得到你的她——Jason niu    原文来自GitHub,主页本人已部分修改,感谢程序猿大神wuxia2001和hackerzhou的开源,感谢这两位大神! 视频结果展示 ...