hibernate学习记录8

来源:互联网 发布:免费php人才招聘系统 编辑:程序博客网 时间:2024/05/01 16:42

继承映射

Employee中有两个子类,分别是技术(Skiller)和销售(Sales)

三种方式解决这个问题:

1、一张表继承体系一张表

Employee表结构修改为id,depart_id,type(表示员工的类型),skill,sell。

employee.hbm.xml文件

<class name="Employee" table="Employee" discriminator-value="0" >
<id name="employeeId" column="employee_id" type="java.lang.Integer">
<generator class="native">
<param name="sequence">employee_sequence</param>
</generator>
</id>

<property name="employeeName" column="employee_name" type="java.lang.String" unique-key="true"/>
<many-to-one name="depart" column="depart_id"></many-to-one>
<discriminator type="int" column="type"></discriminator>
<subclass name="Skiller" discriminator-value="1">
<property name="skill"/>
</subclass>
<subclass name="Sales" discriminator-value="2">
<property name="sell"/>
</subclass>

</class>

2、每个子类一张表(joined-subclass)(表结构)

Employee.hbm.xml文件

<class name="Employee" table="Employee" discriminator-value="0" >
<id name="employeeId" column="employee_id" type="java.lang.Integer">
<generator class="native">
<param name="sequence">employee_sequence</param>
</generator>
</id>

<property name="employeeName" column="employee_name" type="java.lang.String" unique-key="true"/>
<many-to-one name="depart" column="depart_id"></many-to-one>
<!-- 
<discriminator type="int" column="type"></discriminator>
<subclass name="Skiller" discriminator-value="1">
<property name="skill"/>
</subclass>
<subclass name="Sales" discriminator-value="2">
<property name="sell"/>
</subclass>
-->
<joined-subclass name="Skiller" table="skiller">
<key column="emp_id"/>
<property name="skill"/>
</joined-subclass>
<joined-subclass name="Sales" table="sales">
<key column="emp_id"/>
<property name="sell"/>
</joined-subclass>

</class>

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

<subclass name="Skiller" discriminator-value="1">
<property name="skill"/>
</subclass>
<subclass name="Sales" discriminator-value="2">
<join table="sales">
<key column="emp_id"/>
<property name="sell"/>
</join>
</subclass>

4、每个具体类一张表(union-subclass)

hibernate.hbm.xml文件

如果employee不是抽象类,就会有employee表

每个子类都有员工的完整信息

<union-subclass name="Skiller" table="skiller">
<property name="skill"/>
</union-subclass>
<union-subclass name="Sales" table="sales">
<property name="sell"/>
</union-subclass>


0 0
原创粉丝点击