继承映射------union-subclass元素的继承映射


  1. union-subclass映射与joined-subclass映射非常相似,子类增加的属性也可以有非空约束——即父类实例的数据保存在父表中,而子类实例的数据则保存在子表中。与joined-subclass不同的是,子类实例的数据仅保存在子类表中,没有在父类表中有任何记录。在这种映射策略下,子类表的字段会比父类表的字段要多,因为子类表的字段等于父类属性加子类增加属性的总和。

2、使用 union-subclass映射策略是不可使用identity主键生成策略的,因为同一类继承层次中所有实体类必须使用同一个主键种子(即多个持久化实体对应的记录的主键是连续的**)。受此影响,也不应该使用native主键生成策略,因为native会根据数据库来选择使用identity或sequence策略。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="BasicCar"  abstract = “truecatalog="test">
        <id name="id" type="java.lang.Long">
            <column name="id" />
            <generator class="increment" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
        <property name="factory" type="java.lang.String">
            <column name="factory" length="20" not-null="true" />
        </property>
        <property name="date" type="java.util.Date">
            <column name="date" length="10" not-null="true" />
        </property>
         <union-subclass name=“Lorry” table=“lorry”>
             <property name = “loadweightcolumn = “loadweighttype = java.lang.Double”></property>
        </union-subclass> 
        <union-subclass name=“SaloonCar” table=“salooncar”>
            <property name = “loadpersonscolumn = “loadpersonstype =java.lang.Integer”></property>
          </union-subclass>    
    </class>
</hibernate-mapping>

<union-subclass>元素配置,并在该元素中通过<property>配置子类的新增属性。<union-subclass>元素不包含<key> 标签
这种映射策略下各个表之间没有关联关系,每张表对应一个具体的实体类。父类实例的数据保存在父类表中;子类实例的数据仅仅保存在自己的子类表中,而在父类表中没有任何记录。
对于插入操作,父类(如果不是抽象类)记录插入父类表,子类记录插入子类表,各个表都互不影响。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值