您的位置:首页 > 其它

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);

效果图



需要注意的是:大家请看所有的列的值,是否有null的存在,那么这会导致我们使用了subclass就无法使用not null 约束,这会导致数据完整性的危险,导致父类的实例无法保存到数据库

所以该方法不是很推荐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: