读书人

经验10-hibernate 高级映射之继承映射

发布时间: 2012-12-30 10:43:15 作者: rapoo

心得10-hibernate 高级映射之继承映射

1.对象模型(Java类结构)

经验10-hibernate 高级映射之继承映射

2.一个类继承体系一张表(subclass)(表结构)

经验10-hibernate 高级映射之继承映射

一个类继承体系一张表(subclass)(映射文件)

<class name="Employee" table="employee" discriminator-value="0">

<id name="id">

<generator class="native"/>

</id>

<!—鉴别器,用来标识雇员具体是哪个类型;需要注意的是鉴别器的位置是固定,不能乱放,只能放置在id后其他属性前-->

<discriminator column="type" type="int"/>

<property name="name"/>

<subclass name="Skiller" discriminator-value="1">

<property name=”skill”/>

</subclass>

<subclass name="Sales" discriminator-value="2">

<property name="sell"/>

</subclass>

</class>

3. 每个子类一张表(joined-subclass) (表结构)

经验10-hibernate 高级映射之继承映射


每个子类一张表(joined-subclass) (映射文件)

<class name="Employee" table="employee">

<id name="id">

<generator class="native"/>

</id>

<property name="name"/>

<joined-subclass name="Skiller" table="skiller">

<key column="employee_id"/>

<property name="skill"/>

</joined-subclass>

<joined-subclass name="Sales" table="sales">

<key column="employee_id"/>

<property name="sell"/>

</joined-subclass>

</class>

4.混合使用“一个类继承体系一张表”和“每个子类一张表” (表结构)

经验10-hibernate 高级映射之继承映射

混合使用“一个类继承体系一张表”和“每个子类一张表” (映射文件)

<class name="Employee" table="employee">

<id name="id">

<generator class="native"/>

</id>

<discriminator column="type"/>

<property name="name"/>

<subclass name="Skiller">

<property name="net"/>

</subclass>

<subclass name=”Sales”>

<join table="sales">

<key column="employee_id"/>

<property name="sell"/>

</join>

</subclass>

</class>

5.每个具体类一张表(union-subclass) (表结构)

经验10-hibernate 高级映射之继承映射

每个具体类一张表(union-subclass) (映射文件)

<class name="Employee" abstract="true">

<id name="id">

<generator class="hilo"/>

</id>

<property name="name"/>

<union-subclass name="Skiller" table="skiller">

<property name="skill"/>

</union-subclass>

<union-subclass name="Sales" table="sales">

<property name="sell"/>

</union-subclass>

</class>

主健不能是identity类型,如果父类是abstract=”true”就不会有表与之对应。

隐式多态,映射文件没有联系,限制比较多很少使用。


6. 以上情况的优缺点

继承关系:

1).整个继承关系一张表:子类的属性比较少的情况。要使用多态查询时。优点:只有一张表,查找快,查询效率高些;运用多态理念,符合java核心技术。缺点:如果增加子类表结构会被修改,操作麻烦;如果子类特别多,不同子类的不同字段也特别多,那么这张表里会出现很多空值null。

2).每个子类一张表:子类的属性较多时优点:数据库中不存在无用的字段,即不存在空值。

3).每个具体类一张表:当父类是抽象类。不需要多态查询时。缺点:查找的时候先合并所有表然后在查找,比较慢,效率低。

读书人网 >编程

热点推荐