需求:员工是人,顾客是人,员工有技能,顾客有钱(这就是继承映射的需求)
代码分析:
人(父类)
public class Person {
private int id;
private String name;
员工(子类)
public class Emploee extends Person{
private String skill;
}
顾客(子类)
public class Customer extends Person {
private double money;
配置文件
<class name="Person" table="person">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" type="string"></property>
<joined-subclass name="Emploee" table="p_em">
<key column="p_em_id"></key>
<property name="skill"></property>
</joined-subclass>
<joined-subclass name="Customer" table="p_cus">
<key column="p_cus_id"></key>
<property name="money"></property>
</joined-subclass>
</class>
运行类
Customer c = new Customer();
c.setMoney(3000);
c.setName("小林");
Emploee em = new Emploee();
em.setSkill("java技术");
em.setName("小叶");
session.save(c);
session.save(em);
运行结果:
总结:该种方法就是一个字:麻烦,因为它的表太多了。不推荐使用,
大家设想一下,当你想往表里添加数据,那不是得先往父类添加,再往子类添加
用简单继承映射就好了,它的子类里包含父类信息,而且每个子类对应一个表,那么这不是最方便的?
有人说你可以用subclass、discriminator(鉴别器)就好啦,它方便一张表搞定所有子类,可是discriminator的不能设置非空bug是一个坎,所以还是用简单映射吧!