Hibernate持久化对象的生命周期
来源:互联网 发布:淘宝怎么编辑宝贝 编辑:程序博客网 时间:2024/06/15 15:59
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持久化对象的生命周期(lifecycle)
- Hibernate 持久化对象的生命周期
- Hibernate持久化对象的生命周期详解
- Hibernate 持久化对象的生命周期
- hibernate中持久化对象的生命周期
- Hibernate持久化对象的生命周期
- 持久化对象的生命周期[hibernate]
- Hibernate持久化对象的生命周期详解
- Hibernate持久化对象的生命周期详解
- Hibernate持久化对象的生命周期
- Hibernate持久化对象的生命周期
- hibernate 持久化对象生命周期
- Hibernate持久化对象的生命周期(精)
- 第四章 Hibernate中的持久化对象的生命周期
- 【Hibernate】(三)持久化对象的生命周期
- 【Hibernate】(三)持久化对象的生命周期
- 4. Hibernate持久对象的生命周期
- hibernate学习(持久化对象生命周期)
- 汇编逆向《干货收集(持续收集中)》
- 朴素贝叶斯算法学习及代码示例
- leetcode 49. Group Anagrams
- Bash Shell命令行参数的使用
- java知识点整理
- Hibernate持久化对象的生命周期
- shellcode开发艺术前导篇
- 今天第一天去黑马上课
- 浮点数的理解
- pprof不能解析符号的解决方法
- [js高手之路] es6系列教程
- 51nod 1686 第K大区间 二分好题
- mybatis 多对一,xml 文件的处理 学习总结
- 广播电视标准-电视频道和频率带宽的关系