精通Hibernate之映射继承关系二

把每个具体类映射到一张表是最简单的映射方式。如图14-2所示,在关系数据模型中只需定义COMPANIES、HOURLY_EMPLOYEES和SALARIED_EMPLOYEES表。为了叙述的方便,下文把HOURLY_EMPLOYEES表简称为HE表,把SALARIED_EMPLOYEES表简称为SE表。

HourlyEmployee类和HE表对应,HourlyEmployee类本身的rate属性,以及从Employee类中继承的id属性和name属性,在HE表中都有对应的字段。此外,HourlyEmployee类继承了Employee类与Company类的关联关系,与此对应,在HE表中定义了参照COMPANIES表的COMPANY_ID外键。

SalariedEmployee类和SE表对应,SalariedEmployee类本身的salary属性,以及从Employee类中继承的id属性和name属性,在SE表中都有对应的字段。此外,SalariedEmployee类继承了Employee类与Company类的关联关系,与此对应,在SE表中定义了参照COMPANIES表的COMPANY_ID外键。

Company类、HourlyEmployee类和SalariedEmployee类都有相应的映射文件,而Employee类没有相应的映射文件。图14-3显示了持久化类、映射文件和数据库表之间的对应关系。

<id name="id" type="long" column="ID">
   <generator class="increment"/>
   </id>
   <property name="name" type="string" column="NAME" />
   </class>
   </hibernate-mapping>

HourlyEmployee.hbm.xml文件用于把HourlyEmployee类映射到HE表,在这个映射文件中,除了需要映射HourlyEmployee类本身的rate属性,还需要映射从Employee类中继承的name属性,此外还要映射从Employee类中继承的与Company类的关联关系。例程14-2是HourlyEmployee.hbm.xml文件的代码。

例程14-2 HourlyEmployee.hbm.xml

<hibernate-mapping >
   <class name="mypack.HourlyEmployee" table="HOURLY_EMPLOYEES">
   <id name="id" type="long" column="ID">
   <generator class="increment"/>
   </id>
   <property name="name" type="string" column="NAME" />
   <property name="rate" column="RATE" type="double" />
   <many-to-one
   name="company"
   column="COMPANY_ID"
   class="mypack.Company"
   />
   </class>
   </hibernate-mapping>

SalariedEmployee.hbm.xml文件用于把SalariedEmployee类映射到SE表,在这个映射文件中,除了需要映射SalariedEmployee类本身的salary属性,还需要映射从Employee类中继承的name属性,此外还要映射从Employee类中继承的与Company类的关联关系。例程14-3是SalariedEmployee.hbm.xml文件的代码。

时间: 2024-11-02 03:18:58

精通Hibernate之映射继承关系二的相关文章

精通Hibernate之映射继承关系八

由于关系数据模型不允许一个表的外键同时参照两个表的主键,因此无法对TABLE_D表的A_ID字段定义外键参照约束,而应该通过其他方式,如触发器,来保证A_ID字段的参照完整性.由于TABLE_D表的A_ID字段既可能参照TABLE_B表的ID主键,也可能参照TABLE_C表的ID主键,要求TABLE_B表和TALBE_C表的ID主键具有相同的SQL类型. 在ClassD.hbm.xml文件中,用元素来映射ClassD的a属性: <any name="a" meta-type=&q

精通Hibernate之映射继承关系七

Company与Employee类之间为一对多多态关联关系,如果继承关系树的根类对应一个表,或者每个类对应一个表,那么就能映射Company类的employees集合.本节介绍如何映射多对一多态关联.如图14-11所示,ClassD与ClassA为多对一多态关联关系. 假定与ClassD对应的表为TABLE_D,与ClassA对应的表为TABLE_A,在TABLE_D中定义了外键A_ID,它参照TABLE_A表的主键. ClassD对象的a属性既可以引用ClassB对象,也可以引用ClassC对

精通Hibernate之映射继承关系一

在域模型中,类与类之间除了关联关系和聚集关系,还可以存在继承关系,在图14-1所示的域模型中,Company类和Employee类之间为一对多的双向关联关系(假定不允许雇员同时在多个公司兼职),Employee类为抽象类,因此它不能被实例化,它有两个具体的子类:HourlyEmployee类和SalariedEmployee类.由于Java只允许一个类最多有一个直接的父类,因此Employee类.HourlyEmployee类和SalariedEmployee类构成了一棵继承关系树. }else

精通Hibernate之映射继承关系六

在这种映射方式下,继承关系树的每个类以及接口都对应一个表.在本例中,需要创建EMPLOYEES.HE和SE表. 如图14-6所示,EMPLOYEES表仅包含和Employee类的属性对应的字段,HE表仅包含和HourlyEmployee类的属性对应的字段,SE表仅包含和SalariedEmployee类的属性对应的字段.此外,HE表和SE表都以EMPLOYEE_ID字段作为主键,该字段还同时作为外键参照EMPLOYEES表. <id name="id" type="lo

精通Hibernate之映射继承关系四

这种映射方式只需为继承关系树的Employee根类创建一张表EMPLOYEES.如图14-4所示,在EMPLOYEES表中不仅提供和Employee类的属性对应的字段,还要提供和它的两个子类的所有属型对应的字段,此外,EMPLOYEES表中需要额外加入一个字符串类型的EMPLOYEE_TYPE字段,用于区分Employee的具体类型. <id name="id" type="long" column="ID"> <generat

精通Hibernate之映射继承关系三

<hibernate-mapping > <class name="mypack.SalariedEmployee" table="SALARIED_EMPLOYEES"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> &l

精通Hibernate之映射继承关系五

本节的范例程序位于配套光盘的sourcecode\chapter14\14.2目录下,运行该程序前,需要在SAMPLEDB数据库中手工创建COMPANIES表和EMPLOYEES表,然后加入测试数据,相关的SQL脚本文件为/14.2\schema\sampledb.sql. 在DOS命令行下进入chapter14根目录,然后输入命令: ant -file build2.xml run 就会运行BusinessService类.BusinessService的main()方法调用test()方法,

【HIBERNATE框架开发之七】HIBERNATE使用ANNOTATION中各种关系映射的CRUD(增删改查)&amp;&amp;集合映射&amp;&amp;继承映射

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/822.html       首先对于Annotation中CRUD的C(Create)操作:-------- 假设 :   User (MonyToOne)       Group OK,那么有如下 Junit Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Conf

菜鸟问一个hibernate关于继承关系映射的配置问题

问题描述 菜鸟问一个hibernate关于继承关系映射的配置问题 按照教学视频配置: <class name="Employee" discriminator-value = "0"> <id name="id"> <generator class="native"></generator> </id> <property name="name&quo