hibernate持久化对象三种状态及其转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate持久化对象三种状态及其转换相关的知识,希望对你有一定的参考价值。
持久化类类三种状态介绍
1. 瞬时态:也叫做临时态或自由态,它一般指我们 new 出来的对象,它不存在 OID,
与 hibernate session 无关联,在数据库中也无记录。它使用完成后,会被 jvm 直接
回收掉,它只是用于信息携带。
简单说:无 OID 与数据库中的信息无关联,不在 session 管理范围内。
2. 持久态:在 hibernate session 管理范围内,它具有持久化标识 OID 它的特点,在事
务未提交前一直是持久态,当它发生改变时, hibernate 是可以检测到的。
简单说:有 OID 由 session 管理,在数据库中有可能有,也有可有没有。
3. 托管态:也叫做游离态或离线态,它是指持久态对象失去了与 session 的关联,托
管态对象它存在 OID,在数据库中有可能存在,也有可能不存在。
对于托管态对象,它发生改变时 hibernet 不能检测到。
持久化类三种状态切换
1. 瞬时态(new 出来的)
瞬时------>持久 save saveOrUpdate
瞬时----->脱管(游离) 手动设置 oid
2. 持久态 它是由 session 管理
持久------->瞬时 delete() 被删除后持久化对象不在建议使用
持久----->脱管 注意:session 它的缓存就是所说的一级缓存
evict(清除一级缓存 中指定的一个对象)
clear(清空一级缓存)
close(关闭,清空一级缓存)
3. 脱管态 (它是无法直接获取)
脱管----->瞬时 直接将 oid 删除
脱管---->持久 update saveOrUpdate lock(过时)
以上是关于hibernate持久化对象三种状态及其转换的主要内容,如果未能解决你的问题,请参考以下文章
hibernate进阶hibernate持久化对象的三种状态