继承映射
四种模式
1、普通的继承映射
需求:现在有动物(Animal这个类) 还有Dog这个类 和 Fish这个类 要求使用继承映射来完成这个关联关系的配置
<hibernate-mapping package="com.qf.extend2">
<class name="Dog" table="t_dog">
<!--配置的是表里面的主键-->
<id name="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<!--配置的是普通的列-->
<property name="color"></property>
<property name="name"></property>
<property name="num"></property>
</class>
</hibernate-mapping>
2、所有子类对应一张表 父类也对应表
//让所有的继承类共同存储到一张表中去(就是要怎么存储?)
分类:首先得有分类 只有有了分类之后那么这个才知道是谁的数据
表的字段应该包含所有的字段
t_animal_01
id color name type fishCoatCount num
1 金黄金黄的 小狗 dog 23
2 黑黄的 小金鱼 fish 12345
<hibernate-mapping package="com.qf.extend3">
<class name="Animal" table="t_animal_01">
<!--配置的是表里面的主键-->
<id name="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id>
<!-- 下面就配置一个非公共的 -->
<!--首先的整个分类
下面这个就是分类的这个列
-->
<discriminator column="type_" length="30" type="string"></discriminator>
<!--配置的是普通的列-->
<property name="color"></property>
<property name="name"></property>
<!--分别来配置我们的 dog 和 fish了-->
<subclass name="Dog" discriminator-value="dog_">
<!--要给这个孩子配置个类型-->
<property name="num" type="string"></property>
</subclass>
<!--配置鱼的信息-->
<subclass name="Fish" discriminator-value="fish_">
<property name="fishCoatCount" type="java.lang.Integer"></property>
</subclass>
</class>
</hibernate-mapping>
3、我们的所有类都对应表
Animal
id name color
1 小黑 绿色
2 小金鱼 金色
Dog
id num ?
1 56.7
Fish
id fishCoatCount ?
2 34
1>:要实现分表的话那么首先要 将Anianl的主键自增长给我改了...
2>:使用的是join-class来完成分表的
<hibernate-mapping package="com.qf.extend4">
<class name="Animal" table="t_animal_02">
<!--配置的是表里面的主键-->
<id name="id" type="string">
<!-主键不能自增-->
<generator class="assigned">
</generator>
</id>
<!--配置的是普通的列-->
<property name="color"></property>
<property name="name"></property>
<!--接下来就是配置我们的分表了-->
<joined-subclass name="Dog" table="t_dog_02">
<!--这里的key会自动的映射到上面class的主键上面去-->
<key column="id"></key>
<!--配置的是其他的列-->
<property name="num"></property>
</joined-subclass>
<!--接下来配置我们的fish-->
<joined-subclass name="Fish" table="t_fish_02">
<!--这里的key会自动的映射到上面class的主键上面去-->
<key column="id"></key>
<!--配置的是其他的列-->
<property name="fishCoatCount"></property>
</joined-subclass>
</class>
</hibernate-mapping>
4、父类不对应表 子类类对应表(主)
为什么不用第一种呢?因为第一种要编写很多的配置文件 不好使...
第二种 子类在一个表中会有空余的属性 占空间
第三种 删除父类 子类也会被删除 一般来说 尽量避免表中的一删全删
<hibernate-mapping package="com.qf.extend5">
<!-- abstract="true":这个表示的是不对应表 -->
<class name="Animal" abstract="true">
<!--配置的是表里面的主键-->
<id name="id" type="string">
<!-主键不能自增-->
<generator class="assigned">
</generator>
</id>
<!--配置的是普通的列-->
<property name="color"></property>
<property name="name"></property>
<!--接下来就是配置加表的问题-->
<union-subclass name="Dog" table="t_dog_03">
<property name="num"></property>
</union-subclass>
<!--下面就配置鱼了-->
<union-subclass name="Fish" table="t_fish_03">
<property name="fishCoatCount"></property>
</union-subclass>
</class>
</hibernate-mapping>
继承映射的四种模式的配置
最新推荐文章于 2018-05-30 10:41:20 发布