Hibernate-对象状态的转换
一.hibernate对象的三种状态
1.瞬时状态:在数据库没有对应的标识符(ID),但没有在session缓存中
2.持久化状态:在数据库有对应的标识符(ID),也有在session缓存中
3.游离状态:在数据库有对应的标识符(ID),但没有在session缓存中
二.注意的事项
1.瞬时态 --> 持久态:可通过save(),执行完save会打印一条语句,其实是在生成ID并且该对象已经在session缓存中了,即持久态
2.游离态 --> 持久态:可通过update()方法,只是把对象加载到session缓存,没有做其他的变化,也不会给他生成ID
3.只有当执行commit(清理缓存)时持久化才会同步到数据库中,在此之前对象的改变不会影响对应数据库的数据,原理:
脏检查:
Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。
4.当session执行close方法,session缓存的所有对象都被移除,它会先清理缓存,在执行sql语句
5.调用delete()删除游离对象时,当commit时执行sql的删除语句,对象对应的数据库数据没有了,此时对象是瞬时态
6.需要同步到数据库的对象,要处于持久态
图片来自:https://blog.csdn.net/fg2006/article/details/6436517?utm_source=copy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~