Hibernate持久化对象状态详解:四种状态及hbm2ddl.auto模式
需积分: 0 48 浏览量
更新于2024-08-23
收藏 7.15MB PPT 举报
Hibernate 是一个广泛使用的对象关系映射 (ORM) 框架,用于将 Java 对象持久化到关系数据库。在处理对象的状态管理时,Hibernate 将对象划分为四个关键状态:
1. **持久化状态(Persistent State)**: 当一个对象首次通过 `session.save()` 方法保存到数据库时,它处于持久化状态。在这个状态下,对象与数据库中的记录建立了映射关系,并且可以被查询和修改。
2. **临时状态(Transient State)**: 这是对象的新建或刷新后还未与数据库交互的状态。它们在内存中存在,但还没有被添加到持久化上下文(Session)中,此时对这些对象的任何更改都不会反映到数据库中。
3. **游离状态(Detached State)**: 当一个已经持久化过的对象不再与任何 `Session` 相关联时,它进入游离状态。例如,如果从缓存中移除一个对象,或者从数据库中检索出对象并手动将其从 `Session` 中移除。这时,对这些对象的修改需要重新关联到 `Session` 才能持久化。
4. **删除状态(Deleted State)**: 当调用 `session.delete()` 或者设置对象的 `hibernate.id` 属性为 `null` 时,对象进入删除状态。这个状态的对象在下次 `Session.flush()` 时会被从数据库中删除。
关于 `hbm2ddl.auto` 配置选项:
- **create**: 在第一次运行时,Hibernate 会根据实体类生成数据库表,如果表已存在则会被删除并重建。这对于开发环境测试数据初始化非常有用,但在生产环境中不推荐,因为每次部署都会导致数据丢失。
- **create-drop**: 类似于 create,但当 `SessionFactory` 关闭时,数据库表会被自动删除,适用于测试环境。
- **update**: 最常用的选择,既生成表又维护表结构。如果表结构改变,新数据会插入,但旧数据保持不变。
- **validate**: 只检查数据库中的表结构是否与映射定义匹配,不会创建新表。适合用来验证模型的完整性,不会执行插入操作。
在示例代码中,创建了多个 `Customer` 和 `Order` 对象,并将 `Customer` 对象设置为订单的关联对象。当调用 `session.save()` 时,`Order` 对象会变为持久化状态。其中,针对一对一关联,如果采用延迟加载策略,应确保 `<one-to-one>` 元素的 `constrained` 属性设置为 `true`,这确保了 Order 对象关联的 Customer 对象不能为空(类似于 `<many-to-one>` 的 `not-null` 属性)。这样可以保证关联关系的完整性。
374 浏览量
197 浏览量
2007-05-26 上传
428 浏览量
2008-11-12 上传
262 浏览量
2008-09-28 上传
491 浏览量
197 浏览量
简单的暄
- 粉丝: 26
最新资源
- Oracle数据库深度探索:体系结构与编程艺术
- 日语计算机词汇解析
- 理解JavaScript基础与HTML DOM操作
- 英语六级翻译核心词组与句子
- UNICODE:统一字符编码的全球解决方案
- 正则表达式详解:匹配与操作
- Together初学者指南:从零创建项目
- 《330 Java Tips》:汇集众多编程智慧
- 2005年中国系统分析员年第1期:软件开发模型比较与项目管理探讨
- 2008年4月四级计算机考试试卷回顾:数据库与SQL Server知识点梳理
- 配置Nokia Kjava开发环境指南
- 软件测试全解析:黑盒、白盒、灰盒及更多
- 基于CTT的通用试题库管理系统开发
- 精通Linux:从新手到高手的进阶教程
- C语言实现队列数据结构与源码详解
- 智能火灾报警系统:无线远程监控技术探索