Hibernate持久化对象存在三种状态

Hibernate持久化对象存在三种状态
瞬时态 transient  
尚未与Hibernate Session关联对象,被认为处于瞬时状态,失去引用将被JVM回收
无持久化标识OID,未与Session关联

持久态 persistent
数据库中有数据与之对应并与当前session有关联,
并且相关联的session没有关闭数据库并且事务未提交
存在持久化标识OID,与Session关联

脱管态 detached 数据库中有数据与之对应,
但当前没有session与之关联,脱管状态改变hibernate不能检测到
存在持久化标识OID,未与Session关联


* Hibernate持久化对象存在三种状态
1)瞬时(临时):没有与session关联,没有持久化标志OID(OID 为null)
2)持久: 与session关联,有持久化标志OID
3)托管(离线): 没有与session关联,有持久化标志OID

* 对象的状态是可以相互转化的

* 如何直接获得一个瞬时对象:User user = new User();
瞬时---》持久对象  session.save(user);session.saveOrUpdate(user);
瞬时---》托管对象  user.setId(1);

* 如何直接获得一个持久对象:session.get(User.class,1);session.load(User.class,1);query.list();---所有的查询方法获得的对象都是持久对象
持久---》瞬时对象  session.delete(user);
持久---》托管对象  session.close();session.clear();session.evict(user);---清理缓存

* 如何直接获得一个托管对象:没有办法直接获得托管,必须由其他对象转化
托管---》瞬时对象  user.setId(null);
托管---》持久对象  session.update(user);session.saveOrUpdate(user);

* 所有的持久对象都被session的一级缓存引用,持久对象就是缓存中的对象
* 持久对象拥有自动更新数据库的能力,由于快照区的存在
* Session的一级缓存,缓存的是对象的地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值