美文网首页Hibernate 菜鸟教程
Hibernate 菜鸟教程 11 继承 Single Tabl

Hibernate 菜鸟教程 11 继承 Single Tabl

作者: JeGe | 来源:发表于2016-12-18 17:37 被阅读22次

Single Table策略

通过 discriminator鉴别器来区分是父类还是子类

模型对象

父类Employee

public class Employee {
  private Long id;
  private String name;

子类HourlyEmployee

public class HourlyEmployee extends Employee {
  private Double rate;

子类SalariedEmployee

public class SalariedEmployee extends Employee {
  private Double salary;

映射文件Employee.hbm.xml

<class name="Employee" table="t_employee" discriminator-value="1">
        <id name="id">
            <generator class="native" />
        </id>
        <!-- 在id之后配置discriminator的数据库类型的字段名称 ,以及类型(默认是string) -->
        <discriminator column="types" type="int" />
        <property name="name" />
        <!-- 在配置子类 -->
        <subclass name="HourlyEmployee" discriminator-value="2">
            <property name="rate"/>
        </subclass>
        <subclass name="SalariedEmployee" discriminator-value="3">
            <property name="salary" />
        </subclass>
    </class>

测试对象MainTest

public class MainTest {
  Session session = null;
  @Before
  public void save() {
    session = HibernateUtils.INSTANCE.getSession();
    session.beginTransaction();

    Employee employee = new Employee("jege");

    HourlyEmployee hourlyEmployee = new HourlyEmployee();
    hourlyEmployee.setName("hourly");
    hourlyEmployee.setRate(200D);

    SalariedEmployee salariedEmployee = new SalariedEmployee();
    salariedEmployee.setName("salaried");
    salariedEmployee.setSalary(300D);

    session.save(employee);
    session.save(hourlyEmployee);
    session.save(salariedEmployee);
  }

  @Test
  public void get() {
    Employee employee = (Employee) session.get(Employee.class, 1L);
    System.out.println(employee.getName());

    HourlyEmployee hourlyEmployee = (HourlyEmployee) session.get(HourlyEmployee.class, 2L);
    System.out.println(hourlyEmployee.getName());
    System.out.println(hourlyEmployee.getRate());

    SalariedEmployee salariedEmployee = (SalariedEmployee) session.get(SalariedEmployee.class, 3L);
    System.out.println(salariedEmployee.getName());
    System.out.println(salariedEmployee.getSalary());
  }

  @After
  public void colse() {
    session.getTransaction().commit();
    session.close();
  }
}

源码地址

https://github.com/je-ge/hibernate

如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。
**您的支持将鼓励我继续创作!谢谢! **

微信打赏微信打赏
支付宝打赏支付宝打赏

相关文章

  • Hibernate 菜鸟教程 11 继承 Single Tabl

    Single Table策略 通过 discriminator鉴别器来区分是父类还是子类 模型对象 父类Emplo...

  • Hibernate 菜鸟教程 14 继承 PerTable策略

    模型对象 父类Employee 子类HourlyEmployee 子类SalariedEmployee 映射文件E...

  • Hibernate 菜鸟教程 12 继承 Join策略

    模型对象 父类Employee 子类HourlyEmployee 子类SalariedEmployee 映射文件E...

  • 继承

    优秀文章 菜鸟教程 > Java 继承clever_fan > 重新认识java(四) — 组合、聚合与继承的爱恨...

  • Typescript

    学习笔记 菜鸟教程 《菜鸟教程》-TypeScript简介 《菜鸟教程》-TypeScript安装 《菜鸟教程》-...

  • Java继承

    继承:(来自菜鸟教程) 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父...

  • JPA 菜鸟教程 15 继承-一个表-SINGLE_TABLE

    继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略。 举例 如果实体类Teache...

  • Hibernate 菜鸟教程 8 复合主键

    复合主键 复合主键的意思就是2个字段同时为主键不使用无业务含义的自增id作为主键 模型对象Airline 映射文件...

  • Hibernate 菜鸟教程 9 自关联

    自关联 本质还是原来双向一对多,原来要配置两个类,现在全部都配置在一个类里面** 模型对象Employee 映射文...

  • Hibernate 菜鸟教程 10 组成关系

    组成关系 在一个员工模型里面需要存入员工公司所在地址的城市,街道员工籍贯所在的城市,街道,此时可以抽取城市,街道变...

网友评论

    本文标题:Hibernate 菜鸟教程 11 继承 Single Tabl

    本文链接:https://www.haomeiwen.com/subject/cdhzmttx.html