SSH框架之Hibernate的继承映射的形式一(一张表)

不推荐使用)Hibernate的继承映射形式一:
所有子类映射到一张表 (数据库只有一张表)

1、什么情况用:子类教多,且子类较为简单,即只有个别属性!

2、好处:因为使用一个映射文件, 减少了映射文件的个数。

3、缺点:(不符合数据库设计原则)
一个映射文件: Animal.hbm.xml(如何区分是哪个子类的信息?)

4、数据库设计:t_animal (要存储所有的子类信息)

                                                 “鉴别器”
Id   name     catchMouse      eatBanana       type_(区别是哪个子类)
1   大马猴       NULL10个香蕉        猴子
2   大花猫      不抓老鼠         NULL

5、javabean设计:
1)Animal.java

2)Cat.java

3)Monkey.java

6、映射文件的配置:Animal.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <!--
    继承映射,所有的子类都映射到一张表
 -->       
<hibernate-mapping package="sram.extends2" auto-import="true">

   <class name="Animal" table="t_animal">
        <!-- 父类信息 -->
        <id name="id">
            <generator class="native"></generator>
        </id>
        <!-- 
            指定鉴别器字段(作用:区分不同的子类),
                注意:<discriminator></discriminator>的书写位置
                    必须放在<id></id>标签下,<property></property>标签上
        -->
        <discriminator column="type_"></discriminator>
        <property name="name"></property>
        <!-- 
            子类:猫
                每个子类都用subclass节点映射
                注意:一定要指定鉴别器字段,否则报错!
                    Caused by:org.hibernate.MappingException:No discriminator found for...
                鉴别器字段作用:用于在数据库中区别每一个子类的信息,就是一个列!
        -->
        <!--
            discriminator-value="cat_"作用:
                指定鉴别器字段,即上述鉴别器中的type_字段的值
                如果不指定,默认为当前子类的全名(sram.extends2.Cat)
        -->
        <subclass name="Cat" discriminator-value="cat_">
            <property name="catchMouse"></property>
        </subclass>
        <!-- 
            子类:猴子
        -->
        <subclass name="Monkey" discriminator-value="monkey_">
            <property name="eatBanana"></property>
        </subclass>
   </class>

</hibernate-mapping>

7、测试类App.java

8、总结:
1)写法较为简单:所有子类用一个映射文件,且映射到一张表!
2)但数据库设计不合理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值