Hibernate对象管理机制

本文深入探讨了在Hibernate框架中对象的三种状态:瞬时态、持久化态和托管态,以及如何通过常用方法进行状态转换。了解这些概念对于高效管理和操作数据库中的数据至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在hibernate中对象有三种状态:瞬时态或自由态(transient)、持久化态(persistent)、托管态或游离态(detached)
(1).三态简介:
◆transient:瞬态或者自由态 (例如new Person("张三")
1.该po通过new等方式创建
2.该po的实例和session没有关联,不在session中缓存
3.该po在数据库中没有对应的记录

◆persistent:持久化状态 例如通过get和load等得到的对象
1.该po通过get、load等方法从数据库中取出并转化成对象
2.该po与session中的实例关联,在session中缓存
3.该po在数据库中有对应的记录

◆detached:脱管状态或者游离态
1.该po通过session的close、clear或者evict(obj)方法从持久态变化得到
2.该po的实例和session没有关联,不在session中缓存
3.该po在数据库中有对应的记录(前提是没有其他session删除此记录)
4.通过delete(obj)但不能执行事务(在一个事务中),也可以得到游离态的po,因delete而变成游离态可以通过save或saveOrUpdate()变成持久态。

(2)hibernate常用方法简介
◆update方法
1.操作的对象:自由态或脱管状态(因session的关闭而处于脱管状态)的对象
2.作用:将对象变为持久态(更新到数据库中)
3.触发方式:手动调用

◆flush方法
1.操作的对象:持久态对象(po)
2.作用:将对象更新到数据库中
3.触发方式:
a.手动调用
b.session的关闭、SessionFactory关闭,自动调用
c.get()一个对象,把对象的属性进行改变,把资源关闭,自动调用
d.transaction commit的时候,自动调用
e.transaction commit的时候,自动调用

◆lock方法
1.操作的对象:没有更改过的[color=red]脱管状态[/color]的对象(针对的是因Session的关闭而处于脱管状态的po对象,不能针对因delete而处于脱管状态的po对象)
2.作用:将对象变为持久化状态,等待flush方法将其更新到数据库
3.触发方式:手动调用

◆clear方法
1.操作的对象:session缓存
2.作用:完整的清除session缓存
3.触发方式:手动调用

◆evcit(obj)方法
1.操作的对象:某个持久化对象
2.作用:把某个持久化对象从session的缓存中清空
3.触发方式:手动调用

[color=blue]
注意:在实际业务中经常需要从数据库取到一个对象,并将其进行处理,编码或解码某些属性进行其他操作,这时如果对象处于持久态,会在session关闭时同步到数据库中,而我们不想更改数据库中数据的状态,这时有两个方法解决:
1.new一个自由态的对象,拷贝原对象的属性(主键id)除外,使用new处理的新对象进行操作。
2.将对象从session中清空(evict(obj)方法),使其变为detached托管态,再进行操作。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值