Hibernate中不同状态对象间的转化及常用方法的区别

[b]三种对象状态[/b]
(1)自由状态的实例可以通过调用[color=red]save[/color]()、persist()或者saveOrUpdate()方法进行持久化。
(2)持久化实例可以通过调用 [color=red]delete[/color]()变成脱管状态。
通过get()或load()方法得到的实例都是持久化状态的。
(3)脱管状态的实例可以通过调用 [color=red]update[/color]()、saveOrUpdate()、lock()或者replicate()进行持久化。

[b]与SQL的对应[/b]
[color=red]save[/color]()和persist()将会引发SQL的INSERT,
[color=red]delete[/color]()会引发SQL的DELETE,
而[color=red]update[/color]()或merge()会引发SQL的UPDATE。
[color=red]对持久化实例的修改在刷新提交的时候会被检测到,也会引起SQL的UPDATE[/color]。
saveOrUpdate()或者replicate()会引发SQL的INSERT或者UPDATE

[b]save 和update区别[/b]
save的作用是把一个新的对象保存
update是把一个脱管状态的对象保存

[b]persist和save区别[/b]
save会立即执行Sql insert,不管是在transaction内部还是外部
persist在一个transaction外部被调用的时候并不触发一个Sql Insert

[b]update和merge区别[/b]
当我们使用update的时候,执行完成后,我们提供的对象A的状态变成持久化状态
但当我们使用merge的时候,执行完成,我们提供的对象A还是脱管状态,hibernate或者new了一个B,或者检索到
一个持久对象B,并把我们提供的对象A的所有的值拷贝到这个B,执行完成后B是持久状态,而我们提供的A还是托管状态

[b]flush和update区别[/b]
update操作的是在脱管状态的对象,
而flush是操作的在持久状态的对象。
默认情况下,一个持久状态的对象是不需要update的,只要你更改了对象的值,等待hibernate flush就自动保存到数据库了。
hibernate flush发生在几种情况下:
1,调用某些查询的时候
2,transaction commit的时候
3,手动调用flush的时候

[b]lock和update区别[/b]
update是把一个已经更改过的脱管状态的对象变成持久状态
lock是把一个没有更改过的脱管状态的对象变成持久状态
对应更改一个记录的内容,两个的操作不同:
(1)update的操作步骤是:
更改脱管的对象->调用update
(2)lock的操作步骤是:
调用lock把对象从脱管状态变成持久状态-->更改持久状态的对象的内容-->等待flush或者手动flush

参考http://www.blogjava.net/dreamstone/archive/2007/07/29/133071.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值