博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate中对象的三个状态解析
阅读量:6799 次
发布时间:2019-06-26

本文共 886 字,大约阅读时间需要 2 分钟。

Hibernate 将操作的对象分为三种状态:

1.

瞬时 (Transient )/临时状态/自由状态 

持久 (Persistent)

脱管 (Detached)

 

瞬时对象特征:

  第一、不处于 Session 的缓存中,也可以说,不被任何一个 Session 实例关联。

  第二、在数据库中没有对应的记录。

持久化对象特征:

  第一、持久化对象总是被一个 session 关联。

  第二、持久化对象与数据库中的记录对应。

  第三、Session清理缓存的时候,会根据持久化对象的改变,更新数据库。

托管对象特征:

  第一、Session断开关联

  第二、持有OID

 

2.三种状态的区别分析:

  只要与session关联的就是持久态。

  Session没关联,没有OID就是瞬时状态。

  Session没关联,有OID的就是游离状态。

 

3.持久化对象状态的相互转换:

转换图:

 

瞬时对象:

         如何直接获得  --- new 出来

         转换到持久态 ---- save、saveOrUpdate 保存操作

         转换到脱管态 ---- setId 设置OID持久化标识(这个id是数据库中存在的)

持久对象:

   如何直接获得 ---- 通过session查询方法获得 get、load、createQuery、createCriteria

         转换到瞬时态 ---- delete 删除操作 (数据表不存在对应记录 )(其实还有id,只是不叫OID)

         转换到脱管态 ---- close 关闭Session, evict、clear 从Session清除对象

脱管对象:

   如何直接获得 ----- 无法直接获得 ,必须通过瞬时对象、持久对象转换获得

         转换到瞬时态 ---- 将id设置为 null,或者手动将数据库的对应的数据删掉

         转换到持久态 ---- update、saveOrUpdate、lock (对象重新放入Session ,重新与session关联)

在Hibernate所有的操作只认OID,如果两个对象的OID一直,它就直接认为是同一个对象。

 

转载地址:http://ekywl.baihongyu.com/

你可能感兴趣的文章
千金药方——MongoDB疑难杂症的分析和优化
查看>>
【Hadoop Summit Tokyo 2016】为什么我的Hadoop集群运行这么慢?
查看>>
Android应用安全开发之浅谈网页打开APP
查看>>
阿里云MongoDB Sharding备份和恢复服务深度解密
查看>>
tr命令学习(shell)
查看>>
在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案[转]
查看>>
验证码对抗之路及现有验证机制介绍
查看>>
数据库记录安全解决方案
查看>>
[LeetCode] Repeated DNA Sequences
查看>>
Angularjs 源码分析3
查看>>
撕下 Coding iPad 悬赏单的小小感触
查看>>
从文件路径中获取文件名的方法
查看>>
关于Recycle Bin是什么以及实验
查看>>
linux php redis 环境配置
查看>>
Android图形显示系统——上层显示1:界面绘制大纲
查看>>
EDB PPAS的"坑" 不兼容PostgreSQL一例
查看>>
"proxy_pass" cannot have URI part in location given by regular expression
查看>>
ExtJS5学习之Grid与Grid之间的数据拖拽
查看>>
后退时保存表单状态
查看>>
poj 2528 Mayor's posters(线段树+离散化)
查看>>