在hibernate中的继承方式有三种,
一、只需要一张父类表
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
discriminator-value属性:
用于鉴别是哪个类的一个值,表示这个值就是这个类。
如果不写,默认为类的全限定名。
-->
<hibernate-mapping package="hibernate_d_extends">
<class name="Article" table="article" discriminator-value="Article">
<id name="id">
<generator class="native" />
</id>
<discriminator column="class_" type="string"></discriminator>
<span style="white-space:pre"> </span><property name="title"/>
<property name="content" type="text" length="10000"/>
<property name="postTime" type="timestamp"/>
<!-- 子类:Reply -->
<subclass name="Reply" discriminator-value="Reply">
<property name="floor"></property>
</subclass>
<!-- 子类:Topic -->
<subclass name="Topic" discriminator-value="Topic">
<property name="type"></property>
</subclass>
</class>
</hibernate-mapping>
二、采用每个具体类对应一张表,抽象类不对应表
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 采用每个具体类一张表的方式,抽象类不对应表。
abstract默认为false,设为true表示本类不对应表(类可以不是abstract的),这时就会忽略table属性。
-->
<hibernate-mapping package="hibernate_d_extends2">
<class name="Article" table="article2" abstract="true" >
<id name="id">
<!--
当使用每个具体类一张表的方式时,主键生成策略不能是identity。
因为在整个继承结构中,主键值是不能重复的。
-->
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
</id>
<span style="white-space:pre"> </span><property name="title"/>
<property name="content" type="text" length="10000"/>
<property name="postTime" type="timestamp"/>
<!-- 子类:Topic -->
<union-subclass name="Topic" table="topic2">
<property name="type"></property>
</union-subclass>
<!-- 子类:Reply -->
<union-subclass name="Reply" table="reply2">
<property name="floor"></property>
</union-subclass>
</class>
</hibernate-mapping>
三、 也是具体类对应一张表,但是抽象类也相对的有一张表
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 采用每个具体类一张表的方式,抽象类也对应表。
-->
<hibernate-mapping package="hibernate_d_extends3">
<class name="Article" table="article3" >
<id name="id">
<generator class="native">
</generator>
</id>
<span style="white-space:pre"> </span><property name="title"/>
<property name="content" type="text" length="10000"/>
<property name="postTime" type="timestamp"/>
<joined-subclass name="Topic" table="topic3">
<key column="id"></key>
<property name="type"></property>
</joined-subclass>
<joined-subclass name="Reply" table="reply3">
<key column="id"></key>
<property name="floor"></property>
</joined-subclass>
</class>
</hibernate-mapping>
通过这三种方式都可以对类进行继承,