精通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()方法,test()方法依次调用以下方法:

findAllHourlyEmployees():检索数据库中所有的HourlyEmployee对象。

findAllEmployees():检索数据库中所有的Employee对象。

loadCompany():加载一个Company对象。

saveEmployee():保存一个Employee对象。

(1)运行findAllHourlyEmployees()方法,它的代码如下:

tx = session.beginTransaction();

List results=session.find("from HourlyEmployee");

tx.commit();

return results;

在运行Session的find()方法时,Hibernate执行以下select语句:

select * from EMPLOYEES where EMPLOYEE_TYPE='HE' ;

select * from COMPANIES where ID=1;

在加载HourlyEmployee对象时,还会同时加载与它关联的Company对象。

(2)运行findAllEmployees()方法,它的代码如下:

tx = session.beginTransaction();
List results=session.find("from Employee");
tx.commit();
return results;

时间: 2024-08-04 08:16:52

精通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之映射继承关系二

把每个具体类映射到一张表是最简单的映射方式.如图14-2所示,在关系数据模型中只需定义COMPANIES.HOURLY_EMPLOYEES和SALARIED_EMPLOYEES表.为了叙述的方便,下文把HOURLY_EMPLOYEES表简称为HE表,把SALARIED_EMPLOYEES表简称为SE表. HourlyEmployee类和HE表对应,HourlyEmployee类本身的rate属性,以及从Employee类中继承的id属性和name属性,在HE表中都有对应的字段.此外,Hourly

精通Hibernate之映射继承关系三

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

【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