Hibernate操作(二)

一,java对象的三种状态

(1)瞬时状态

瞬时状态又称临时状态,当数据库中的数据不予对象关联时,这时对象就处在瞬时状态。临时状态的代码是不受Session管理的,也没有关联的。当java垃圾处理回收器运行时,如果瞬时状态的对象没有引用将被回收。

(2)持久状态

与数据库中数据有关联就是持久状态。持久状态下的代码时守Session管理和跟踪的。

(3)游离状态

脱离持久状态(脱离Session管理的类)的java对象就是游历状态。其实游离状态和瞬时状态很像,但不同的是游离状态是曾经关联过,而瞬时状态是没有关联过,并且数据库中有对应的数据。当java垃圾处理回收器运行时,如果游离状态的对象没有引用将被回收。

二,三种状态之间的转换

(1)瞬时状态转换为持久状态

使用Session的Save(),saveOrUpdate()等方法保存对象后,该对象的状态由瞬时状态转换为持久状态。使用Session的get()和load()获取到的对象是持久状态的。

(2)持久状态转为瞬时状态

执行Session的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时该对象没有任何与数据库关联的对象。

(3)持久化状态转换为游离状态

执行Session的evict(),clear(),或close()方法,对象由原来的持久状态转为游离状态。

(4)游离状态转换为持久状态

执行Session的update()或者saveOrUpdate()方法,对象由游离状态转变为持久状态,该对象再次与当前Session关联。

(5)游离状态转换为瞬时状态

执行Session的delete()方法,对象由游离转换为瞬时。

三,脏检查和刷新缓存机制

(一)脏检查

当你持久化状态的对象发生改变时,hibernate不会立即提交执行sql改变数据库数据,session会为它的值类型复制一份快照,对比对象的值类型是否发生改变。当缓存机制运行时如果值类型改变了,就会执行相应的sql语句更改数据库。

(二)刷新缓存机制

需要注意的是,当session中的对象发生改变时,不会立即执行sql语句。而是在以下几种情况下执行:

(1)应用程序显示调用session.flush()方法时

(2)应用程序调用session.commit()方法时,session会隐式调用session.flush()方法。

四,更新数据方法

Hibernate的更新方法,包括update(),saveOrUpdate(),merge()。

(1)update可用于对象的游离状态转换为持久状态和更新数据。当参数的OID为空抛出异常。

(2)saveOrUpdate()当数据库没有关联信息(瞬时状态对象)时,调用save()方法,有(游离状态对象)则调用Update()方法。

(3)merge()方法,能够将传入的游离对象,复制一份拥有相同OID的对象到持久化状态中,通过对持久化状态对象的脏读检查来实现更新操作。如果传入的是瞬时对象则,复制其对象实现插入操作,并返回这一新的持久化状态对象。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值