Hibernate继承策略解析:单表与具体表继承
需积分: 9 37 浏览量
更新于2024-08-23
收藏 2.51MB PPT 举报
"关于Hibernate基础教程中的继承实现策略以及对象状态管理"
在Hibernate框架中,继承是用于建模对象层次结构的重要手段,它提供了三种不同的策略来处理继承关系映射到数据库的关系模型。这些策略包括:
1. **单表继承(Single Table Inheritance)**:
在这种策略下,所有继承类的数据都存储在一个共享的表中。表的字段会包含所有子类可能需要的属性,即使某个子类并不使用某些属性。标识符(ID)字段用于区分不同类型的子类实例。这种策略的优点是减少了数据库表的数量,但可能导致数据冗余。
2. **具体表继承(Concrete Table Inheritance)**:
每个子类都有自己的独立表,而超类的信息则存储在一个单独的超类表中。子类表通过主键与超类表建立一对一关联。这种方法避免了单表继承中的数据冗余,但可能会增加数据库表的数量。
3. **每个具体类一个表( Joined Subclass Inheritance)**:
这种策略结合了前两者的特点,每个子类都有自己的表,同时超类的公共属性依然保存在一个单独的表中。子类表通过外键关联到超类表。这种策略适用于有大量子类并且每个子类都有很多特定属性的情况。
在Java编程中,创建对象有两种常见方式:`new` 关键字和 `newInstance()` 方法。`new` 关键字直接创建一个新的对象实例,而 `newInstance()` 是基于反射的,它需要类已经被加载并连接到JVM。`newInstance()` 方法在动态加载类或在不确定具体类的情况下非常有用,例如在插件系统中。
Java事务API(JTA)是Java平台上的标准事务管理接口,用于管理分布式事务。在Hibernate中,对象有不同的状态,如:
- **游离状态(Detached)**:对象不在Session管理下,但之前曾是持久化状态。
- **持久化状态(Persistent)**:对象与数据库中的记录对应,Session管理其生命周期。
- **临时状态(Transient)**:对象刚被创建,尚未与Session关联。
- **已删除状态(Removed)**:对象从Session中移除,即将从数据库中删除。
对象状态的转换操作包括:
- 游离状态可以通过`save()`, `persist()`, 或 `saveOrUpdate()` 恢复为持久化状态。
- `delete()` 方法将持久化对象标记为已删除,下次提交时会执行SQL DELETE。
- `get()` 和 `load()` 返回的都是持久化状态的对象。
- 游离状态的实例可以用 `update()`, `saveOrUpdate()`, `lock()`, 或 `replicate()` 重新变为持久化。
- `merge()` 方法会复制游离对象的状态到一个新创建的持久化实例。
在查询方面,Hibernate提供HQL(Hibernate Query Language)和SQL直接查询。示例中的HQL查询是:
```sql
select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_, this_.sex as sex0_0_ from Person this_ where (this_.name=? and this_.sex=?)
```
而使用`createSQLQuery()`方法则可以直接执行原生的SQL查询,如:
```java
List objs = (List) session.createSQLQuery("SELECT * FROM Person").list();
Object[] o = (Object[]) objs.get(0);
```
以上代码从Person表中获取所有记录,并打印出第一行数据。
2013-04-13 上传
2013-08-14 上传
107 浏览量
点击了解资源详情
2008-12-28 上传
2010-04-29 上传
2009-11-03 上传
2008-12-30 上传
2013-01-04 上传
韩大人的指尖记录
- 粉丝: 30
- 资源: 2万+
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载