Hibernate中的对象有3种状态:Transient(瞬时),Persistent(持久)和Detached(托管)。

1 瞬时状态:

由new命令开辟内存空间的java对象,例如Student stu = new Student();如果没有变量对他引用,它将被JVM回收。瞬时对象在内存中孤立存在,他的意义仅是携带信息的载体,不和数据库中的数据有任何的关联。通过session的save()和saveOrUpdate()方法可以把一个瞬时对象与数据库相关联,并把瞬时对象携带的信息通过配置文件所做的映射插入到数据库中,这个瞬时对象就成了持久化对象,拥有和数据库记录相同的id标示(Hibernate自动将id赋予它)

瞬时对象的特点是:

(1)不和Session实例关联

(2)在数据库中没有和瞬时对象关联的记录

2 持久化状态:

      持久的实例在数据库中有对应的记录,拥有一个持久化标识。持久对象总是与Session和Transaction相关联,在一个Session中,对持久对象的改变不会马上对数据库进行变更,而必须在Transaction终止,也就是执行commit()之后,才在数据库中真正运行SQL进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象成为脏(dirty)对象。

使用find(),get(),load()和iterater()等方法查询到得数据对象,都是持久化对象;如果一个瞬时对象被持久对象引用,则该对象也会自动变为持久对象。

如果使用delete()方法,它就会变为瞬时对象;当一个Session执行close()或clear()、evict()之后,持久对象就会变为托管对象。

持久对象的特点:

(1)和Session实例关联

(2)在数据库中有和持久对象关联的记录

3 托管状态:

与持久对象关联的Session被关闭后,对象就变为托管的。对托管对象的引用依然有效,对象可继续被修改。托管对象如果重新关联到某个新的Session上,会再次转变为持久的。托管状态期间的改动将会被持久化到数据库。

托管状态拥有数据库标识id,所以它可以通过update()、saveOrUpdate()和lock()等方法,再度与持久层关联。

托管对象的特点:

(1)本质上和瞬时对象相同

(2)只是比瞬时对象多了一个数据库记录标识值id

session是hibernate中对对象进行操作的类,是Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。
Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作,比如看其AIP可以发现有很多方法如:

org.hibernate
Interface Session

All Superinterfaces:
Serializable
All Known Subinterfaces:
EventSource, Session
All Known Implementing Classes:
SessionImpl

对象在Hibernate中的三种状态相关推荐

  1. 图解Hibernate中的三种状态(瞬时态,持久态,游离态|托管态)

    注:  1.  瞬时态转化为持久态时,调用save()方法主要是给瞬时态对象赋值id并把该对象保存到session缓存中 2.  持久态转换为游离态主要是把在session缓存中的对象从session ...

  2. Hibernate中的三种数据持久状态和缓存机制

    Java三大框架之--Hibernate中的三种数据持久状态和缓存机制 Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没 ...

  3. 2021-06-04 Java对象在Hibernate下的4种状态和Session相关方法以及对象识别

    注:集成开发环境软件:MyEclipse(2017破解版)和mySQL(MySQL Server 8.0) 一.Query(查询) (1)Query(查询)接口允许你在数据库上执行查询并控制查询如何执 ...

  4. CoreAPI_对象三种状态

    Hibernate三种状态之一:临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: Hibernate三种状态之二:持久化状态(P ...

  5. 深入hibernate的三种状态

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

  6. Stateflow中三种状态转移方式的区别(默认转移、外部转移、内部转移)

    文章目录 前言 一.让人头秃的自增循环 二.默认转移和内部转移的区别 三.抛弃during追求entry 总结 前言 Stateflow中有三种典型的状态转移方式:默认转移.外部转移.内部转移. 其中 ...

  7. Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...

  8. 什么是生命周期?Activity生命周期的三种状态

    什么是生命周期 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停 ...

  9. hibernate中的PO持久化对象及PO三种状态

    一,认识持久化对象PO: 在hibernate的应用程序中,每一个数据库中的表都对应一个持久化对象PO.PO可以看成是与数据库表相映射的java对象.最简单的PO对应数据库中某个表中的一条记录,多个记 ...

最新文章

  1. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-2 运行可执行文件
  2. spring boot 1.5.4 之监控Actuator(十四)
  3. Python中format_map与format字符串格式化的区别
  4. 动态规划学习之三种方法解决斐波拉契数
  5. html文件上传数量限制,使用HTML中的input上传文件最多可以上传多少张?
  6. android 获取元素的下标_Appium中定位方式by_android_uiautomator
  7. java程序员招聘现场
  8. 如何不露声色地知道别人是不是单身?
  9. java nature_Java中BufferedReader和scanner的对比 - nature
  10. 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点
  11. java 爬虫 图片_java实现爬虫爬取小姐姐图片
  12. 欲学机器学习必先掌握Shell,AI工程师自制教程,获Reddit网友400+点赞 | PDF+视频...
  13. 视图使用like失效_技术干货合集「失效分析、PFMEA DFMEA关系、文件结果化」
  14. BT种子 磁力链接 是什么?
  15. 最受程序员 欢迎的14个社区
  16. 微信公众号H5之微信分享常见错误和问题(the permission value is offline verifying)
  17. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制字符旋涡
  18. RPC 开发系列一:RPC 基本介绍
  19. 平开式窗帘有哪些选购要点?-好佳居窗帘十大品牌
  20. java邮箱465端口发送验证码,htmlmail465,465端口发邮件

热门文章

  1. 封装Dialog子组件 解决 visible.sync问题
  2. W5500 HAL库代码(使用官网最新的W5500驱动)STM32F1系列
  3. 蓝桥杯 青蛙跳杯子(广搜)
  4. Hystrix(豪猪)的原理探索(一)
  5. 编程高手必备的思维模式:为什么抽象在计算机科学中如此重要
  6. 程序员编程艺术第三十二~三十三章:最小操作数,木块砌墙问题
  7. speedoffice如何修改Word文档页面显示比例
  8. 【图像处理】Matlab模拟校正二维码生成与识别
  9. tensorflow serving 安装报错:java.io.IOException: Cannot run program patch
  10. OSI七层模型中各层协议及作用