Hibernate对象的生命周期及三种状态
来源:互联网 发布:网络餐饮监管存在问题 编辑:程序博客网 时间:2024/06/05 22:46
对象生命周期
一个Java对象从被创建开始,到不再使用,被垃圾回收期回收为止。
三种状态
对象(持久化类实例)要处于session对象的管理中才能与数据库发生联系。
在基于hibernate框架的应用中,我们依据对象与Session对象的关系不同情况,把对象的状态人为地分为三种:
1)瞬时状态 (Transient):如果对象从未与Session对象关联过,称该对象处于瞬时状态。
2)持久状态(Persistent) :如果对象与Session对象关联起来,且该对象对应到数据库记录,则称该对象处于持久化状态。
3)脱管状态(Detached):如果对象曾经与Session关联过,但因为Session被关闭或调用了Session的evict或clear方法把它从Session中移除了,则该对象脱离了Session的管理,这种状态为脱管状态。
三种状态之间的转换
1)瞬时对象(Transient)
1.1)new 创建 (无->Transient)
1.2)delete--(Persistent->Transient) session.delete(o)
2)持久对象(Persistent)
1.1)save/saveOrUpdate.(Transient->Persistent)
1.2)get/load/find,iterator.(无->Persistent)
get--get(User.class,id),通过类名和id从数据库读取指定记录,无匹配记录返回null。
load--通过类名和id从数据库读取指定记录,无匹配记录抛OjectNotException异常。
find,iterator---hibernate3已废除,统一Query接口提供。
1.3)update/saveOrUpdate/lock.(Detached->Persistent)
lock--把对象和session关联起来,lock之前的修改不会更新到数据库。
update--把对象和session关联起来,并且会把修改更新到数据库。
saveOrUpdate--把对象和session关联起来,并且会把修改更新到数据库。
3)脱管对象(Detached)
evict--把某个对象从session中移除(Persistent->Detached)
clear--把所有对象从session中移除
close--关闭session,其中的对象也全部被移除了。
状态转换的图示,如下:
三种状态的比较
status
Mem
Session
DB
Transient
Y
N
N
Persistent
Y
Y
Y
Detached
Y
N
Y
瞬时状态的对象只存在于内存中。
持久状态的对象分别存在于内存、session对象、数据库之中。
脱管状态的对象存在于内存、数据库之中,但不在session对象中。
- Hibernate对象的生命周期及三种状态
- Hibernate实体对象的生命周期(三种状态详解)
- Hibernate实体对象生命周期内的三种状态
- Hibernate实体对象的生命周期(三种状态详解)
- hibernate中实体对象的三种状态(生命周期中的三种状态)
- Hibernate的对象三种状态 +生命周期图 + Hibernate 的保存
- hibernate对象的三种状态及之间的转换
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- Hibernate缓存简介及领域对象的三种状态
- Hibernate缓存简介及领域对象的三种状态
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- Hibernate中对象的三种状态及相互转化
- 《TCP/IP详解 卷1:协议》 读书笔记 第3章 IP:网际协议
- 平面方程推导
- 华为上机题汇总(一)
- Android 缓存
- Lua数据类型
- Hibernate对象的生命周期及三种状态
- 购物车的实现原理
- Android Launcher3 强制横屏
- UIView与CALayer的区别,很详细
- 【LeetCode-21】 Merge Two Sorted Lists(C++)
- Eclipse项目小红叉
- 怎么实现EDIUS中倒影的制作
- CentOS7防火墙设置
- eclipse打包apk时遇到的问题