您的位置:首页 > 其它

hibernate学习记录8

2014-03-20 11:20 204 查看
继承映射

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: