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>
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>
相关文章推荐
- Hibernate学习-06:CRUD(增删改查)操作之删除记录
- Hibernate4学习记录三(HibernateUtils工具类设计)
- hibernate学习记录2
- Hibernate学习记录2
- 我的Hibernate学习记录(二)
- Hibernate学习记录3 Hibernate 配置多数据源
- Hibernate 学习记录 4
- hibernate学习记录,如何将写成的类映射成数据库表!
- Hibernate学习记录4 缓存机制
- Hibernate学习记录
- Hibernate持久化对象修改id重新保存的办法——Hibernate学习记录二
- Hibernate学习记录1
- hibernate学习笔记之三(单条记录的增删改查)
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- 【hibernate】学习期间总结与记录
- 我的Hibernate学习记录(二)
- Hibernate学习记录5 配置C3P0
- hibernate学习记录6
- 我的Hibernate学习记录(一)
- Hibernate 学习记录