Hibernate 支持三种基本的继承映射策略:

1、单表继承:每棵类继承树使用一个表
2、具体表继承:每个子类一个表
3、类表继承:每个具体类一个表(有一些限制)

三种方式的比较:
1、所有类映射成一张表会产生数据冗余(不过这是通常采用的方法)
2、每个类映射成一张表会有效率问题,比如是三层或四层结构时,对于查询或更新会发出很多sql语句
3、具体类映射成表的缺点是主键不能自增

结论:使用第一种方式

Java代码  
  1. /** 动物 */
  2. public class Animal {
  3. private Integer id;
  4. private String name;
  5. private String type;
  6. //getter and setter
  7. }
Java代码  
  1. /** 猪 */
  2. public class Pig extends Animal {
  3. private Double weight;
  4. //getter and setter
  5. }
Java代码  
  1. /** 鸟 */
  2. public class Bird extends Animal{
  3. private String color;
  4. //getter and setter
  5. }
Xml代码  
  1. <hibernate-mapping package="org.monday.hibernate4.domain">
  2. <class name="Animal" table="tbl_animal">
  3. <id name="id">
  4. <generator class="identity" />
  5. </id>
  6. <!-- 辨别者列 -->
  7. <discriminator column="type" type="string" />
  8. <property name="name" />
  9. <!-- 子类 -->
  10. <subclass name="Pig" discriminator-value="p">
  11. <property name="weight" />
  12. </subclass>
  13. <!-- 子类 -->
  14. <subclass name="Bird" discriminator-value="b">
  15. <property name="color" />
  16. </subclass>
  17. </class>
  18. </hibernate-mapping>

下面是基于注解的

Java代码  
  1. /** 动物 */
  2. @Entity
  3. @Table(name = "tbl_animal")
  4. @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  5. @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
  6. @DiscriminatorValue("a")
  7. public class Animal {
  8. @Id
  9. @GeneratedValue(strategy = GenerationType.IDENTITY)
  10. private Integer id;
  11. private String name;
  12. // getter and setter
  13. }
Java代码  
  1. /** 猪 */
  2. @Entity
  3. @DiscriminatorValue("p")
  4. public class Pig extends Animal {
  5. private Double weight;
  6. //getter and setter
  7. }
Java代码  
  1. /** 鸟 */
  2. @Entity
  3. @DiscriminatorValue("b")
  4. public class Bird extends Animal {
  5. private String color;
  6. // getter and setter
  7. }

Hibernate4继承映射相关推荐

  1. Hibernate之继承映射

    Hibernate的继承映射可以理解为两个持久化类之间的继承关系    例如老师和人之间的关系 持久化类  Person类 public  class  Person { private   Inte ...

  2. 第10 章继承映射(InheritanceMappings)

    10.1. 三种策略 Hibernate支持三种基本的继承映射策略: ·每个类分层结构一张表(table per class hierarchy) ·每个子类一张表(table per subclas ...

  3. OpenXava 4.5支持JPA继承映射和自动化业务逻辑

    OpenXava是一个支持快速企业级应用开发的Java框架,其最新版本支持所有的JPA继承映射策略和自动化业务逻辑(Automated Business Logic,ABL)库.OpenXava 4. ...

  4. Hibernate读书笔记---继承映射

    对于面向对象的程序设计语言,继承.多态是两个最基本的概念.Hibernate的继承映射可以理解两个持久化类之间的继承关系. Hibernate支持几种继承映射策略,不管哪种继承映射策略,Hiberna ...

  5. 浅析Hibernate映射(三)——继承映射

    对象模型示例: 继承映射的实现方式有三种: (一)每棵类继承树一张表 关系模型: 映射文件: <hibernate-mapping package="com.jialin.hibern ...

  6. NHibernate Inheritance Mapping 继承映射

    参考PoEAA,继承的设计模式有:Concrete Table Inheritance(具体表继承).Single Table Inheritance(单表继承).Class Table Inheri ...

  7. Hibernate继承映射

    Hibernate继承映射 在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键 ...

  8. Hibernate→HQL、query.list()返回数据类型、查询相关语句、分页、原生SQL、@注解、持久化对象状态及生命周期、一多关系、继承映射关系、逆向工程

    HQL Query实例与表 session通用工具类 Query对象 from 类→List<类>接收 映射类 仅查询商品 查询商品及所在商家 别名 返回数据类型定义 Iterator接收 ...

  9. Hibernate第九篇【组件映射、继承映射】

    前言 到目前位置,我们已经学习了一对一.一对多.多对一.多对多映射了-既然Hibernate是ORM实现的框架,它还提供了组件映射和继承映射..本博文主要讲解组件映射和继承映射 Java主要的类主要有 ...

最新文章

  1. L1-005 考试座位号 (15分) C语言实现(18行代码AC!)
  2. python中text怎么旋转字体_Python+OpenCV实现旋转文本校正方式
  3. python获取中文字体点阵坐标_Python实现点阵字体读取与转换的方法
  4. 标签 href 怎么拼接_【微信】用户-标签的兴趣建模
  5. IP,VIP,SCAN IP之间的关系是怎么样的呢?
  6. 使用Python开发小说下载器,不再为下载小说而发愁 #华为云·寻找黑马程序员#
  7. 后台的Activity被系统回收怎么办?
  8. C语言实现斐波那契数列
  9. Keil 系列软件安装(一)Keil C51(Keil4)
  10. 知识付费的痛点:如何让用户持续学习?
  11. 基于whisper模型的在线添加视频字幕网站(持续更新)
  12. 男士黑色手表的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  13. 阿里云企业物联网平台推出千里传音播报服务 高效打造云端一体智能硬件
  14. Sky Hackthon比赛指北-基础篇
  15. 生物识别身份验证:技术的现状和发展趋势
  16. 计算机基础 MBR主引导记录
  17. 和平精英灵敏度分享码服务器没有响应,和平精英主播灵敏度
  18. 批处理文件 执行java_利用批处理文件运行java程序
  19. LeetCode:390. 消除游戏————中等
  20. yum https ssl双向认证 证书申请

热门文章

  1. hdu2235 机器人的容器
  2. 【Android NDK 开发】JNI 引用 ( 全局引用 | NewGlobalRef | DeleteGlobalRef )
  3. 【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )
  4. nmon服务器监控工具的使用安装
  5. idea创建一个SpringBoot项目
  6. 51NOD 1001 数组中和等于K的数对
  7. 01.Python基础-3.集合容器
  8. java中的访问修饰符 (2013-10-11-163 写的日志迁移
  9. Doubly Linked List,( Aizu - ALDS1_3C )
  10. MySQL 清理slowlog方法