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>
<discriminator column="types" type="int"/>
<property name="name" />
<!-- 在配置子类 -->
<subclass name="HourlyEmployee" discriminator-value="2">
<join table="t_HourlyEmployee">
<key column="id" />
<property name="rate" />
</join>
</subclass>
<subclass name="SalariedEmployee" discriminator-value="3">
<join table="t_SalariedEmployee">
<key column="id" />
<property name="salary" />
</join>
</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 系列教程13-继承-鉴别器与内连接相结合的更多相关文章

  1. Hibernate 系列教程11-继承-Single Table策略

    Single Table策略 通过 discriminator鉴别器来区分是父类还是子类 Employee public class Employee { private Long id; priva ...

  2. Hibernate 系列教程17-查询缓存

    在二级缓存配置成功的基础上进行查询缓存配置 Product public class Product { private Long id; private String name; Product.h ...

  3. Hibernate 系列教程16-二级缓存

    pom.xml <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate- ...

  4. Hibernate 系列教程15-一级缓存

    Product public class Product { private Long id; private String name; Product.hbm.xml <class name= ...

  5. Hibernate 系列教程14-继承-PerTable策略

    Employee public class Employee { private Long id; private String name; HourlyEmployee public class H ...

  6. Hibernate 系列教程12-继承-Join策略

    Employee public class Employee { private Long id; private String name; HourlyEmployee public class H ...

  7. Hibernate 系列教程10-组成关系

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

  8. Hibernate 系列教程9-自关联

    自关联:本质还是原来双向一对多,原来要配置两个类,现在全部都配置在一个类里面 Employee public class Employee { private Long id; private Str ...

  9. Hibernate 系列教程8-复合主键

    复合主键 复合主键的意思就是2个字段同时为主键 不使用无业务含义的自增id作为主键 Airline package com.jege.hibernate.compositeid; import jav ...

随机推荐

  1. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  2. 游戏Demo(持续更新中...)

    格斗游戏 主要用于联系Unity的动画系统,并加入了通过检测按键触发不同的技能. WASD控制方向,AD为技能1,SW为技能2,右键跳跃,连续单机普通连招. 本来是要用遮罩实现跑动过程中的攻击动作,但 ...

  3. HDU 1242 Rescue(BFS),ZOJ 1649

    题目链接 ZOJ链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The ...

  4. 解决MySQL 在 Java 检索遇到timestamp空值时报异常的问题

    使用JDBC检索MySQL数据库,如果遇到timestamp字段的值为空,那么会立即报出异常: ### Error querying database.  Cause: java.sql.SQLExc ...

  5. Chapter 16_2 继承

    类也是对象,所有它们也可以从其他类获得方法.这就是“继承”,可以在Lua中表示: Account = { balance = } function Account:new(o) o = o or {} ...

  6. TimeJob权限问题 拒绝访问

    internal void RenameWithoutValidation(string value) {     if (value == null) throw new ArgumentNullE ...

  7. 解决time_wait过多的问题

    #netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ LAST_ACK 14SYN_RECV 348ESTABLI ...

  8. Python 邮件发送

    python发送各类邮件的主要方法   python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点.     一.相关模块介绍 ...

  9. xTiNt 论坛发帖辅助软件 1.0 绿色版

    软件名称:xTiNt 论坛发帖辅助软件 1.0 绿色版软件语言: 简体中文授权方式: 免费软件应用平台: Win7 / Vista / Win2003 / WinXP / Win2008 软件大小: ...

  10. 3.编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。

    Account package com.hanqi.test; public class Account { private String zhanghao;private double yve; A ...