Hibernate基础------》关系映射---》继承映射-》所有类映射到一张表中(类融合映射或者鉴别器映射)
2017-03-27 00:03
344 查看
子类融合映射或者鉴别器映射,其实是我自己起的名字,方便我自己记忆而已,如果你们听了,请一笑而过就行了。(所有的类对应一张表)该方法也不是特别推荐
子类融合映射是通过父类的映射将子类的属性带出来,同时在运行类中不采用父类实例化,而都采用子类实例化,然后保存在session当中。
例子:猫和猴子是动物,猫喜欢抓老鼠 ,猴子喜欢爬树
代码:
动物类(父类)
public abstract class Animal {
private int id;
private String name;
猫类继承动物类
猴子类也继承动物类
动物的配置(此处就是知识点,不写猫类和猴子类的配置而直接写动物类,在动物类中使用 discriminator(鉴别器)来区分猫和猴子)
<class name="Animal" table="T_namial">
<id name="id" column="id">
<generator class="native"/>
</id>
<discriminator column="Type_"></discriminator>
<!--这个discriminator一定要放在property的前面,否则将会出现不能解读xml由于鉴别器的不存在 异常
--><property name="name" column="name"></property>
<subclass name="Cat" discriminator-value="cat_">
<property name="CauchMouse"></property>
</subclass>
<subclass name="Monkey" discriminator-value="monkey_">
<property name="climing"></property>
</subclass>
</class>
运行类
Cat c = new Cat();
c.setCauchMouse("猫抓老鼠厉害");
c.setName("猫");
Monkey m = new Monkey();
m.setCliming("猴子上树快");
m.setName("猴子");
session.save(m);
session.save(c);
效果图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/05/38ef697fb26200ca7455238dc7009f19)
需要注意的是:大家请看所有的列的值,是否有null的存在,那么这会导致我们使用了subclass就无法使用not null 约束,这会导致数据完整性的危险,导致父类的实例无法保存到数据库
所以该方法不是很推荐
子类融合映射是通过父类的映射将子类的属性带出来,同时在运行类中不采用父类实例化,而都采用子类实例化,然后保存在session当中。
例子:猫和猴子是动物,猫喜欢抓老鼠 ,猴子喜欢爬树
代码:
动物类(父类)
public abstract class Animal {
private int id;
private String name;
猫类继承动物类
猴子类也继承动物类
动物的配置(此处就是知识点,不写猫类和猴子类的配置而直接写动物类,在动物类中使用 discriminator(鉴别器)来区分猫和猴子)
<class name="Animal" table="T_namial">
<id name="id" column="id">
<generator class="native"/>
</id>
<discriminator column="Type_"></discriminator>
<!--这个discriminator一定要放在property的前面,否则将会出现不能解读xml由于鉴别器的不存在 异常
--><property name="name" column="name"></property>
<subclass name="Cat" discriminator-value="cat_">
<property name="CauchMouse"></property>
</subclass>
<subclass name="Monkey" discriminator-value="monkey_">
<property name="climing"></property>
</subclass>
</class>
运行类
Cat c = new Cat();
c.setCauchMouse("猫抓老鼠厉害");
c.setName("猫");
Monkey m = new Monkey();
m.setCliming("猴子上树快");
m.setName("猴子");
session.save(m);
session.save(c);
效果图
需要注意的是:大家请看所有的列的值,是否有null的存在,那么这会导致我们使用了subclass就无法使用not null 约束,这会导致数据完整性的危险,导致父类的实例无法保存到数据库
所以该方法不是很推荐
相关文章推荐
- Hibernate基础------》映射关系---》继承映射-》join_subclass映射(每个类对应一张表)
- hibernate继承关系映射关系方法(二)--每个子类一张表
- Hibernate 继承映射关系 —— 类继承树映射成一张表
- Hibernate 一张表细化操作及表之间继承关系的映射配置
- Hibernate基础------》关系映射---》继承映射-》简单映射
- hibernate:继承关系_整个继承树映射到一张表
- 【SSH 基础】Hibernate继承关系映射
- hibernate映射继承关系(一):一张表对应一整棵类继承树
- hibernate继承关系映射方法(三)--每个具体类一张表TPC
- hibernate继承映射关系 —— 每个具体类映射成一张表
- [翻译] hibernate映射继承关系(一):一张表对应一整棵类继承树
- hibernate继承关系映射方法(一)--共享一张表
- hibernate继承关系映射和java反射机制的运用
- 精通Hibernate之映射继承关系一(图)
- 精通Hibernate之映射继承关系六
- 精通Hibernate之映射继承关系三
- Hibernate之 对象/关系数据库映射基础(Basic O/R Mapping)
- 精通Hibernate之映射继承关系(四)
- 关于hibernate映射继承关系时独立的子类配置文件的问题
- 精通Hibernate之映射继承关系二(图)