http://blog.csdn.net/yerenyuan_pku/article/details/52760627

在Hibernate中java对象的状态

Hibernate把对象分为4种状态:

  • 临时状态
  • 持久化状态
  • 游离状态
  • 删除状态

Session的特定方法能使对象从一个状态转换到另一个状态。

临时对象(transient)

  • 在使用代理主键的情况下,OID通常为null。
  • 不处于Session的缓存中。 
    Session里面是有一个集合的,这个集合我们称为Session的缓存,叫做一级缓存,它会引用Session要管理的对象。
  • 在数据库中没有对应的记录。

在以下情况下,Java对象进入临时状态。

  • 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。

持久化对象(也叫”托管”)(Persist)

  • OID不为null。
  • 位于Session缓存中。
  • 持久化对象和数据库中的相关记录对应。
  • Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。
  • 在同一个Session实例的缓存中,数据库表中的每条记录只对应唯一的持久化对象。

Session的许多方法都能够触发Java对象进入持久化状态:

  • Session的save()方法把临时对象转变为持久化对象。
  • Session的load()或get()方法返回的对象总是处于持久化状态。
  • Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
  • 当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。

游离对象(也叫”脱管”)(Detached)

  • OID不为null。
  • 不再处于Session的缓存中。
  • 一般情况下,游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录。
  • 修改此状态对象时数据库不会有变化。

Session的以下方法使持久化对象转变为游离对象:

  • 当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。
  • Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保留了大量的持久化对象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。

删除对象(Removed)

  • OID不为null。
  • 从一个Session实例的缓存中删除。
  • 执行了delete()后的对象。
  • Session已经计划将其从数据库删除,Session在清理缓存时,会执行SQL delete语句,删除数据库中的对应记录。
  • 一般情况下,应用程序不该再使用被删除的对象。

对象的状态转换说明

对象的状态转换图: 

对象的状态总结

状态 Session缓存存在对应的记录 数据库中存在对应的记录
临时状态 no no
持久化状态 yes 可能有也可能没,如:Customer c=new Customer(); session.save(c); // 持久对象,但数据库中没有
游离状态 no 可能有(数据没有删除)也可能没有

(转)Hibernate框架基础——在Hibernate中java对象的状态的更多相关文章

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

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

  2. (转) Hibernate框架基础——操纵持久化对象的方法(Session中)

    http://blog.csdn.net/yerenyuan_pku/article/details/52761021 上一篇文章中我们学习了Hibernate中java对象的状态以及对象的状态之间如 ...

  3. 框架基础之Hibernate简介

    框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...

  4. Hibernate框架基础

    Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...

  5. (转)Hibernate框架基础——一对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即 ...

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

                                                                                     Hibernate中Java对象的三种 ...

  7. Hibernate中Java对象的生命周期

    一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...

  8. Hibernate中的对象有三种状态

    Hibernate中的对象有三种状态: 瞬时状态 (Transient),持久状态 (Persistent), 1. 脱管状态 (Detached) 1. 1. 瞬时状态 (Transient) 由  ...

  9. jsp九大内置对象与servlet中java对象

    jsp九大内置对象 request对象 :  getParameter(String name)获取表单提交的数据 getParamegerNames() 获取客户端提交的所有参数名 getAttri ...

随机推荐

  1. memory management in oracle 11G R2

    When we talking about memory management in Oracle, we are refering to SGA and PGA. The management me ...

  2. Solidworks如果有两个相似的图纸如何快速复制第二份图纸

    如下图所示,我有两个零件,只有四个孔从螺纹孔改成了通孔(孔的尺寸改大了一点) 我已经画好了带螺纹的图纸   直接另存为,但是不要勾选另存为副本,改一下另存为的名字即可   然后打开这个另存为的工程图, ...

  3. 机器学习A

    订阅地址 :  http://blog.csdn.net/lizhe_dashuju/rss/list

  4. MapReduce01

    ================== Hadoop内核 | MapReduce(分布式计算框架) ================== 源于Google的MapReduce论文 ----------& ...

  5. [python基础] python生成wordcloud并保存

    1.核心包 #jieba.pandas用来处理数据,数据源以xls格式存储的,这里用pandas进行处理import jieba from jieba import analyse import pa ...

  6. JSP-Runoob:JSP 日期处理

    ylbtech-JSP-Runoob:JSP 日期处理 1.返回顶部 1. JSP 日期处理 使用JSP最重要的优势之一,就是可以使用所有Java  API.本章将会详细地讲述Java中的Date类, ...

  7. PCB Winform使用谷歌webkit内核 应用

    我们Winfrom界面嵌入网页最常用的是WebBrowser控件,因为微软自带的,使用方便,但在实际使用起来,会遇到各种麻烦(JS,不兼容问题,渲染等问题) 而实际WebBrowser控件内核是微软的 ...

  8. 微信小程序压缩图片并上传到服务器(拿去即用)

    这里注意一下,图片压缩后的宽度是画布宽度的一半 canvasToTempFilePath 创建画布的时候会有一定的时间延迟容易失败,这里加setTimeout来缓冲一下 这是单张图片压缩,多张的压缩暂 ...

  9. 【转】Java中特殊的String类型

    Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第 ...

  10. Vue使用html2canvas将页面转化为图片

    需求是微信端将页面截屏之后保存到本地,使用了html2canvas插件 先引入插件 npm install --save html2canvas 之后在你所需要使用的页面引入 import html2 ...