三态的基本概念:

1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据。用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象;

2,  持久化状态(Persistent):与session关联而且在数据库中有对应数据。已经持久化,增加到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;

3,  游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。
特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;

×√

暂时状态

(Transient)

持久化状态

(Persistent)

游离状态

(Detached)

是否处于Session缓存中

×

×

数据库中是否有相应记录

×


游离对象和暂时对象异同:

两者都不会被Session关联,对象属性和数据库可能不一致;

游离对象有持久化对象关闭Session而转化而来,在内存中还有对象所以此时就变成游离状态了;

Hibernate和SQL的关系:

在操作了hibernate的方法如save()等后,并没有直接生成sql语句,去操作数据库,而是把这些更新存入Session中,仅仅有Session缓存要被更新时,底层的sql语句才干运行,数据存入数据库;

以下举例说明:
一,Session.save(user)执行机理。
1,把User对象增加缓存中,使它变成持久化对象;
2,选用映射文件指定的标识生成ID;
3,在Session清理缓存时候运行:在底层生成一个insert sql语句,把对象存入数据库;

注意:在你运行Session.save(user)后,在Session清理缓存前,假设你改动user对象属性值,那么终于存入数据库的值将是最后改动的值;此过程中ID不能被改动;

二,Session.delete(user)执行过程。
假设user是持久化对象,则运行删除操作,相同底层数据库的运行条件是:在Session清理缓存时候;
假设user是游离对象:
1,将user对象和Session关联,使之成为持久化对象;
2,然后依照user 是持久化对象的过程运行;

三态之间的转换方法:

①怎样成为自由态?对象通过构造方法成为自由态;持久态和游离态则通过session的delete方法成为自由态

②怎样成为持久态?对象能够由session的load或get方法直接成为持久态;自由态对象能够通过save,saveOrUpdate或persist方法成为持久态;游离态对象则能够通过update,saveOrUpdate成为持久态

③怎样成为游离态?游离态仅仅能由持久态转换而来,通过close或clear方法实现。

几种转换方法的对照:

1.get 与load

都是从数据库中载入数据封装为java对象,使得java对象从自由态直接变为持久态;

可是有两点差别:①get返回对象能够为null,load返回值则始终不为null,找不到时会抛异常②get即时运行insert,而load则是在使用此对象时才运行insert

2.save,update与saveOrUpdate

save是将自由态转为持久态,而update是将游离态转为持久态,saveOrUpdate能够说是两者的综合,它运行时先推断对象的状态(主要是通过有无主键推断的),若是自由态,则save,若是游离态,则update

3.save与persist

两者都是将对象由自由态转为持久态,但返回值不同:save返回主键值,而persist不返回

4,saveOrUpdate与merge

两者都是将自由态或游离态对象与数据库关联,但merge不改变对象的原有状态

此外,对clear与flush方法也作介绍。clear是将session中的对象所有变为游离态,是对象由持久态变为游离态的一种方法(第二种是关闭session);flush方法时为了使update操作能即时进行(正常情况下,仅仅有在事务关闭时才进行update操作)。

hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)...相关推荐

  1. hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

    三态的基本概念: 1,  临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: ...

  2. python对象的生命周期_python对象的生命周期

    引言 碰到以下问题: 代码1: from Tkinter import * root = Tk() photo = PhotoImage(file=r'E:\workspace\python\111. ...

  3. Java 对象的生命周期

    Java对象的生命周期 在Java中,对象的生命周期包括以下几个阶段: 创建阶段(Created) 应用阶段(In Use) 不可见阶段(Invisible) 不可达阶段(Unreachable) 收 ...

  4. java session 生命周期_java之hibernate之session中对象的生命周期

    1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...

  5. Hibernate学习(4)- Hibernate对象的生命周期

    1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联: 2.持久化状态(P ...

  6. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定...

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. java中的的一些生命周期,Java中对象的生命周期

    Java中对象的生命周期 (1) 对象生命周期的开始 对象生命周期开始时,需要为对象分配内存,并且初始化它的实例变量: 对象生命周期结束 Java虚拟机的垃圾回收线程回收对象的内存. (2) 创建一个 ...

  8. (转)Hibernate框架基础——在Hibernate中java对象的状态

    http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...

  9. C++对象模型9——临时对象的生命周期、模板及实例化分析、内联函数

    一.临时对象的生命周期 T c=a+b 假设T是一个类型,那么上述代码执行时,首先会产生一个临时对象用来存放a+b的结果(拷贝初始化临时对象),然后用该临时对象拷贝初始化c,最后临时对象被释放.如果开 ...

最新文章

  1. 留学计算机Ps模板,留学ps怎么写?出国留学ps模板
  2. Java消息系统简单设计与实现
  3. jmeter 查看提取的参数
  4. Python fire官方文档教学(自动生成命令行,个人觉得意义不大,不如argparse)
  5. 窗体常用属性的演练 c#
  6. CVPR 2021 | 大幅涨点!新型动态激活函数和轻量级网络TFNet
  7. SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案
  8. 最近项目参考的文章们
  9. C# processbar设置
  10. c++:ISO C++ forbids declaration of ‘xxx’ with no type
  11. 互联网小团队创业启示录
  12. C语言里面邻接表的创建
  13. 计算机一级考试广告,2013年计算机一级考试MsOffice备考题及答案(21)
  14. 深度学习--Inception-ResNet-v1网络结构
  15. GAN (Generative Adversarial Nets 生成对抗网络)
  16. John McCarthy:人工智能之父
  17. gm220s路由器怎么设置_二级路由器怎么设置_二级路由器设置图解教程-192路由网...
  18. 大扇区硬盘的出现与分析
  19. js调用APP后,如果有App直接进App,没有则进入App下载页面
  20. WiFi分销多开版v5.0.0

热门文章

  1. Android开发-屏幕常亮的方法
  2. python知识:如何多窗口切换
  3. 深入理解ROS技术 【3】ROS下的模块详解(129-180)
  4. erc20 php,使用php将erc20令牌从一个帐户传输到另一个帐户
  5. Centos 配置JAVA_HOME
  6. Matlab-使用逻辑值进行索引
  7. G - 数据结构实验之排序七:选课名单
  8. 【opencv】13.摄像头焦距和视场角
  9. 【深度学习】ResNet的思想
  10. Java Calendar 获取时间为明天的上午10点