打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
merge attachDirty attachClean用法

merge attachDirty attachClean用法.

2011-07-17 02:01:50| 分类: 默认分类 | 标签: |字号 订阅

大家对以下3个措施定然不面生,一些IDE生成的代码等闲都有下面三个措施:

public Person merge(Person detachedInstance) { log.debug("merging Person instance"); try { Person result = (Person) getSession().merge( detachedInstance); log.debug("merge successful"); return result; } catch (RuntimeException re) { log.error("merge failed", re); throw re; } } public void attachDirty(Person instance) { log.debug("attaching dirty Person instance"); try { getSession().saveOrUpdate(instance); log.debug("attach successful"); } catch (RuntimeException re) { log.error("attach failed", re); throw re; } } public void attachClean(Person instance) { log.debug("attaching clean Person instance"); try { getSession().lock(instance, LockMode.NONE); log.debug("attach successful"); } catch (RuntimeException re) { log.error("attach failed", re); throw re; } }

merge:将传入的detached事态的对象的属性复制到永远化对象中,并归来该永远化对象 。万一该session中未曾关系的永远化对象,加载一个,万一传入对象未保留,保留一个副本并作为永远对象归来,传入对象依旧坚持detached事态。

attachDirty:将传入的对象永远化并保留。万一对象未保留(Transient事态),调用save措施保留。万一对象已保留(Detached事态),调用update措施将对象与Session重新关系。

attachClean:将传入的对象事态设置为Transient事态。


解释一下,在Hibernate中的对象有三种事态,即:
俄而事态(Transient)、永远事态(Persistent)、脱管事态(Detached)

1、俄而事态(Transient)
由new号召开发内存空间的Java对象,也即便平时所纯熟的等闲Java对象。

如:Person p = new Person();
俄而对象个性:
(1)不和Session实例关系
(2)在数据库中未曾和俄而对象关系的登记

2、永远事态(Persistent)
永远的实例在数据库中有对应的登记,并具有一个永远化标识(identifier).
永远对象总是与Session和Transaction相干联,在一个Session中,对永远对象的改换不会即刻对数据库举行改变,而定然在Transaction终止,也即便厉行commit()尔后,才在数据库中恳挚运行SQL举行改变,永远对象的事态才会与数据库举行同步。在同步之前的永远对象称为脏(dirty)对象。
俄而对象转为永远对象:
(1) 穿越Session的save()和saveOrUpdate()措施把一个俄而对象与数据库相干联,这个俄而对象就成为永远化对象。
(2) 利用fine(),无线通讯模块get(),load()和iterater()待措施查询到的数据对象,将成为永远化对象。
永远化对象的个性:
(1) 和Session实例关系
(2) 在数据库中有和永远对象关系的登记

3、脱管事态(Detached)
与永远对象关系的Session被关闭后,对象就变为脱管对象。对脱管对象的引用依旧管用,对象可继续被修正。
脱管对象个性:
(1) 性质上和俄而对象雷同
(2) 只是比爱俄而对象多了一个数据库登记标识值id.
永远对象转为脱管对象:
当厉行close()或clear(),evict()尔后,永远对象会变为脱管对象。

俄而对象转为永远对象:
穿越Session的update(),saveOrUpdate()和lock()等措施,把脱管对象变为永远对象。 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Hibernate 中的attachDirty,attachClean,merge之间的区别
Hibernate的各种保存方式的区别(3)
Hibernate中update()和merge()的区别
Hibernate的merge()方法
第四节 SESSION对象
Hibernate三种状态的区分,以及save,update,saveOrUpd
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服