Hibernate对象状态和保存方法详解
5星 · 超过95%的资源 需积分: 9 155 浏览量
更新于2024-09-24
收藏 50KB DOC 举报
Hibernate 对象状态以及各种保存方法的区别
Hibernate 对象状态可以分为三种:瞬时态、持久态和脱管态。每种状态都有其特点和使用场景。
1. 瞬时态(Transient Objects)
瞬时态是指使用 new 操作符初始化的对象,这些对象不是立刻持久的,也就是说没有和任何数据库表进行关联。只要应用不再引用这些对象,它们的状态将丢失,并且由垃圾回收机制回收。数据库中没有这些对象,只存在于内存中。
例如,使用 new 命令开辟内存空间的 Java 对象,例如 `Person person = new Person("amigo", "女");` 如果没有变量对该对象进行引用,它将被 Java 虚拟机回收。瞬时对象在内存中孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系。在 Hibernate 中,可通过 Session 的 save() 或 saveOrUpdate() 方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
2. 持久态(Persistent Objects)
持久态是指具有数据库标识的对象,也就是从数据库获取来的。持久对象有持久化管理器 Session 统一管理,持久实例实在事务中进行操作。当事务结束时,持久对象的状态与数据库同步,可以这样理解当我们在对象处于持久态时候,我们对对象的改变将会同步到数据库中。其原理是当事务提交时刻,提供执行 SQL 的 INSERT、UPDATE、DELETE 语句把内存中的状态同步到数据库中。
例如,在 Hibernate 中,我们可以使用 save() 或 saveOrUpdate() 方法将对象保存到数据库中,并将其状态同步到数据库中。
3. 脱管态(Detached Objects)
脱管态是指 Session 关闭之后,持久化对象变成离线对象,离线对象不能同数据库同步,也不再受 Hibernate 管理。此时数据库中还存在这个对象,只是没有纳入 Session 管理。
例如,在 Hibernate 中,当 Session 关闭时,持久化对象将变成脱管对象,不能再与数据库同步。
在 Hibernate 中,我们可以使用 merge() 方法将脱管对象与数据库同步。
save()、saveOrUpdate()、merge() 等方法的区别:
* save() 方法:将瞬时对象保存到数据库中,并将其状态同步到数据库中。
* saveOrUpdate() 方法:如果对象不存在于数据库中,则将其保存到数据库中;如果对象已经存在于数据库中,则将其更新到数据库中。
* merge() 方法:将脱管对象与数据库同步。
Hibernate 对象状态是指对象在不同的生命周期中的状态,每种状态都有其特点和使用场景。理解不同的对象状态可以帮助我们更好地使用 Hibernate 框架。
2021-10-11 上传
点击了解资源详情
2020-08-25 上传
2018-08-14 上传
2008-09-03 上传
2007-08-22 上传
点击了解资源详情
点击了解资源详情
yuji0228
- 粉丝: 12
- 资源: 50
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析