冬眠继承:每个类层次结构的表
这是教程系列的8部分中的6部分
教程内容:
- 休眠框架简介
- Eclipse中的Hibernate Hello World示例
- openSession和getCurrentSession之间的区别
- 休眠一对一映射示例
- 休眠一对多映射示例
- 休眠多对多映射示例
- 冬眠继承:每个类层次结构的表
- 冬眠继承:每个子类表
- 冬眠继承:每个具体类的表
- openSession和getCurrentSession之间的区别
- 获取与加载之间的差异
- 春季MVC 冬眠 MySQL CRUD示例
- 弹簧 Rest休眠示例
我们将看到如何在hibernate中实现继承。您可以通过3种方式在hibernate中实现继承。在本文中,我们将看到其中一种,即每个类层次结构一个表。
休眠中的继承:
爪哇 是面向对象的语言,继承是竞彩篮球分析的主要功能之一。关系模型可以实现“is a” 和 “has a”关系,但是休眠为我们提供了以不同方式实现类层次结构的方法。
每个类层次结构一张表:
在每个类层次结构的一个表中,将为上述层次结构创建一个表。将创建具有以下结构的SHAPE表。
如您所见,仅创建了一个具有子类属性的表(SHAPE)。
根据上面的类图,我们将创建三个类:Shape.java,Rectangle.java和Circle.java
1.Shape.java
这是我们实体类层次结构的根类。
创造 形状 .java 在 sr c -> 组织 .arpit.javapostsforlearning.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
包 组织 . Arpit . 爪哇 postsforlearning; 进口 爪哇 x .坚持不懈. 柱 ; 进口 爪哇 x .坚持不懈.鉴别柱; 进口 爪哇 x .坚持不懈.鉴别值; 进口 爪哇 x .坚持不懈. 实体 ; 进口 爪哇 x .坚持不懈.产生价值; 进口 爪哇 x .坚持不懈. ID ; 进口 爪哇 x .坚持不懈.遗产; 进口 爪哇 x .坚持不懈.继承类型; 进口 爪哇 x .坚持不懈. 表 ; 进口 爪哇 x .坚持不懈.鉴别类型; @ 实体 @ 表 ( 名称 =“形状”) @遗产(战略=继承类型.SINGLE_TABLE) @鉴别柱 ( 名称 =“歧视者”, discriminatorType=鉴别类型. 串 ) @鉴别值( 值 = “ S” ) 上市 类 形状 { @ ID @产生价值 @ 柱 ( 名称 =“ 形状 _Id”) 整型 形状 ID ; @ 柱 ( 名称 =“形状名称”) 串 形状 名称 ; 上市 形状 () { } 上市 形状 ( 串 形状 名称 ) { 这个 . 形状 名称 = 形状 名称 ; } //获取器和设置器 } |
形状 是我们的根类,因此一些注释需要与根类一起使用以实现继承。
@遗产:
为了在hiberante中实现继承,使用@Inheritance批注。该批注定义了要为实体类层次结构实现的继承策略。对于每个类层次结构的一个表,我们已使用Single_Table作为继承策略。此批注在根级别或子层次结构级别定义适用不同策略的地方。
@DiscriminatorColumn:
@DiscriminatorValue:
2,Rectangle.java
这是我们的孩子班。
创造 长方形.java 在 sr c -> 组织 .arpit.javapostsforlearning.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
包 组织 . Arpit . 爪哇 postsforlearning; 进口 爪哇 x .坚持不懈. 柱 ; 进口 爪哇 x .坚持不懈. 柱 ; 进口 爪哇 x .坚持不懈.鉴别值; 进口 爪哇 x .坚持不懈. 实体 ; @ 实体 @鉴别值( 值 = “ R” ) 上市 类 长方形 延伸 形状 { @ 柱 ( 名称 =“矩形长度”) 整型 长度 ; @ 柱 ( 名称 =“矩形_宽度”) 整型 宽度 ; //获取器和设置器 上市 长方形() { } 上市 长方形( 串 形状 名称 , 整型 长度 , 整型 宽度 ) { 超 ( 形状 名称 ); 这个 . 长度 = 长度 ; 这个 . 宽度 = 宽度 ; } //获取器和设置器 } |
3,Circle.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
包 组织 . Arpit . 爪哇 postsforlearning; 进口 爪哇 x .坚持不懈. 柱 ; 进口 爪哇 x .坚持不懈. 柱 ; 进口 爪哇 x .坚持不懈.鉴别值; 进口 爪哇 x .坚持不懈. 实体 ; @ 实体 @鉴别值( 值 = “C” ) 上市 类 圈 延伸 形状 { @ 柱 ( 名称 =“圆半径”) 整型 半径 ; 上市 圈 () { } 上市 圈 ( 串 形状 名称 , 整型 半径 ) { 超 ( 形状 名称 ); 这个 . 半径 = 半径 ; } //获取器和设置器 } |
4,Hiberante.cfg.xml:
创建一个名为“hibernate.cfg.xml” 在 sr c folder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<? XML文件 版='1.0' 编码方式='utf-8'?> <!DOCTYPE 冬眠的-组态 上市 “-//休眠/休眠配置DTD 3.0 // EN” "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <冬眠的-组态> <会议-厂 > <! - 数据库 连接 设定 - > <属性 名称 =“ 连接.driver_class”> com .微软.sqlserver. 数据库 . 的SQL ServerDriver</属性> <属性 名称 =“ 连接.url”> 数据库 :sqlserver:// localhost:1433; 数据库 = UserInfo</property> <属性 名称 =“ 连接.username”> SA </属性> <属性 名称 =“ 连接.password”></属性> <! - JDBC 连接 池子 ( 利用 的 已建 - 在 ) - > <属性 名称 =“ 连接.pool_size”>1</属性> <! - 的SQL 方言 - > <属性 名称 =“方言”> 组织 .冬眠的.方言. 的SQL Server2005方言</属性> <! - 启用 冬眠's 自动 会议 语境 管理 - > <属性 名称 =“ current_session_context_class”> 线 </属性> <! - 禁用 的 第二 - 水平 快取 - > <属性 名称 =“ 快取 .provider_class”> 组织 .冬眠的. 快取 .NoCacheProvider</属性> <! - 回声 所有 d 的SQL 至 标准输出 - > <属性 名称 =“ show_sql”> 真正 </属性> <! - 下降 和 回覆 - 创造 的 数据库 图式 上 启动 - > <属性 名称 =“ hbm2ddl.auto”> 创造 </属性> <映射 类 =“ 组织 .arpit.javapostsforlearning.Shape”></映射> <映射 类 =“ 组织 .arpit.javapostsforlearning.Rectangle”></映射> <映射 类 =“ 组织 .arpit.javapostsforlearning.Circle”></映射> </会议-厂 > </冬眠的-组态> |
5,主类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
包 组织 . Arpit . 爪哇 postsforlearning; 进口 组织 .冬眠的.届会; 进口 组织 .冬眠的.会话工厂; 进口 组织 .冬眠的. CFG .组态; 进口 组织 .冬眠的.服务.服务注册; 进口 组织 .冬眠的.服务.服务注册Builder; 上市 类 休眠主 { 上市 静态的 虚空 主要 ( 串 [] args ) { 形状 形状 = 新 形状 (“ Sqaure”); 长方形 长方形= 新 长方形(“长方形”, 10, 20); 圈 圈 = 新 圈 (“圈”, 4); 组态 组态= 新 组态(); 组态.配置(); 服务注册 sr = 新 服务注册Builder().applySettings(组态.getProperties()).buildServiceRegistry(); 会话工厂 科幻 =组态.buildSessionFactory( sr ); 届会 ss = 科幻 .openSession(); ss .beginTransaction(); ss . 保存 ( 形状 ); ss . 保存 (长方形); ss . 保存 ( 圈 ); ss .getTransaction(). 承诺 (); ss . 关 (); } } |
项目结构:
6,运行它
运行它时,您将获得以下输出。
1 2 3 4 5 6 7 8 |
冬眠: 创造 表 形状 (鉴别器 varchar (31) 不 空值 , 形状 _Id 整型 身份 不 空值 , 形状名称 varchar (255), 矩形宽度 整型 , 矩形长度 整型 , 圆半径 整型 , 主 键 ( 形状 _Id)) 二月 04, 2013 11:01:36 下午 组织 .冬眠的. 工具 .hbm2ddl.模式导出 执行 信息 : HHH000230: 架构图 出口 完成 冬眠: 插 进入 形状 (形状名称, 鉴别器) 价值观 (?, 'S' ) 冬眠: 插 进入 形状 (形状名称, 矩形宽度, 矩形长度, 鉴别器) 价值观 (?, ?, ?, 'R' ) 冬眠: 插 进入 形状 (形状名称, 圆半径, 鉴别器) 价值观 (?, ?, 'C' ) |