【SSH快速进阶】——Hibernate继承映射:每个类映射一张表

简介: 上文说了每棵继承树映射一张表,本文继续描述让每个类都映射一张表的配置。

场景


  与上篇文章场景一样,如下类图


0.png


  上图中Pig类和Bird类继承Animal类,要让每个类映射一张表,就是让着三个类都分别映射一张表,但同时这三张表也跟对应的三个类似的,有继承关系,在父类对应的表中,实际上会存储所有子类对应的记录,如下表所示:

                       (表 1)


1.png


  Pig和Bird的记录都表示一个动物,因此都会在Animal对应的表中存储,而它们各自的拓展属性则存储在各自对应的表中,主键与Animal对应记录的主键各自对应。


配置



  PO对象

  跟上篇文章一样,实体类没有任何变化。

  Animal.java


public class Animal {
    private int id;
    private String name;
    private boolean sex;
    //getter、setter
}


  Bird.java


public class Bird extends Animal{
    private int height;
    //getter、setter
}


  Pig.java

public class Pig extends Animal{
    private int weight;
    //getter、setter
}


 映射文件


 配置映射文件时,父类还用<class>标签来定义即可;用<joined-subclass>标签定义两个子类, 标签内必须有key标签,表示子类对应表中记录的主键,这个主键与父类表中记录的主键一一对应;子类的特有属性同样用<property>定义即可。


 Extends.hbm.xml


<hibernate-mapping package="com.danny.hibernate">
    <class name="Animal">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
        <property name="sex"/>
        <joined-subclass name="Pig" table="t_pig">
            <key column="pid" />
            <property name="weight"/>
        </joined-subclass>
        <joined-subclass name="Bird" table="t_bird">
            <key column="bid"/>
            <property name="height"/>
        </joined-subclass>
    </class>
</hibernate-mapping>

测试


 这种方案相对于上层实现(增删改查等操作)不变,因为对象模型并没有改变,只是关系模型改了,只需要修改映射文件即可。


 所以对对象的操作同上篇文章《【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表》中的测试一致。



总结


 缺点:查询时需要关联表,效率差;插入时也要执行多个insert语句,适合继承程度不深的情况。


 优点:粒度较细,调理清楚,没有冗余。


 在表1中就可以看出,父类是真正意义上的“父类”,因此,如果父类是抽象类或者没有实际意义的话,可以用此方案。


相关文章
|
2月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
13 0
|
2月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
13 0
|
2月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——Dept.java
ssh(Spring+Spring mvc+hibernate)——Dept.java
12 0
|
2月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——showDept.jsp
ssh(Spring+Spring mvc+hibernate)——showDept.jsp
8 0
|
2月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——applicationContext.xml
ssh(Spring+Spring mvc+hibernate)——applicationContext.xml
7 0
|
2月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——EmpController
ssh(Spring+Spring mvc+hibernate)——EmpController
9 0
|
2月前
|
前端开发 Java 网络安全
ssh(Spring+Spring mvc+hibernate)简单增删改查案例
ssh(Spring+Spring mvc+hibernate)简单增删改查案例
11 0
|
安全 Java 应用服务中间件
Java 近期新闻:Hibernate 6.0、JobRunr 5.0、JHipster 7.8.0、Spring CVEs、JReleaser 1.0-RC2
本期 Java 近期新闻综述内容涉及 JDK 19、Spring Boot、Spring CVEs、Apache Tomcat 点版本、Quarkus Tools for Visual Studio Code、Micronaut 3.4.1、JetBrains 加入 Micronaut 基金会、Open Liberty Paketo Liberty Buildpack、Hibernate 6.0、JobRunr 5.0、WildFly 26.1 Beta S2I 镜像、JReleaser 1.0-RC2、MicroStream 7.0-M2、JHipster 7.8.0、JMH 1.35。
782 0
|
22天前
|
SQL Java 数据库连接
jpa、hibernate、spring-data-jpa、jdbcTemplate
jpa、hibernate、spring-data-jpa、jdbcTemplate
|
5月前
|
存储 Java 数据库连接
Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析
Spring Boot 的嵌入式服务器功能是一项方便而强大的功能,它允许你在应用程序中直接运行 Web 服务器,无需将其部署到单独的独立 Web 服务器中。这使得开发、测试和部署 Web 应用程序变得容易,而且它还是轻量级的、易于启动和停止的,易于配置。
67 0