浅谈Hibernate中的三种数据状态
Hibernate中的三种数据状态:临时、持久、游离
1.临时态(瞬时态)
不存在于session中,也不存在于数据库中的数据,被称为临时态。
数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。
比如:刚刚使用new关键字创建出的对象。
2.持久态
存在于session中,事务还未提交,提交之后最终会进入数据库的数据,被称为持久态。
数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;
持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。
比如:刚刚使用session.save()操作的对象,当对象save后,会将数据持久化,这时obj.set()后再提交事务hibernate会检测到数据的修改。
而如果在save这个对象之前(即使是处在事务中),也即是还没有持久化这个对象之前,用obj.set()则hibernate不能检测到数据修改,不会影响数据库。
3.游离态(脱管态)
存在于数据库中,但不存在于session中的数据,被称为游离态。
数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。
比如:使用了session.save(),并且事务已经提交之后,对象进入数据库,就变成了游离态。
总结:
瞬时态: 没有session管理,同时数据库没有对应记录。
持久态: 有session管理,同时在数据库中有记录。
脱管态/游离态: 没有session管理,但是在数据库中有记录。
【推荐】国内首个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初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)