hibernate之继承关系

来源:互联网 发布:a家家具淘宝官网旗舰店 编辑:程序博客网 时间:2024/06/03 04:39

在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>

通过这三种方式都可以对类进行继承,


0 0
原创粉丝点击