快速业务通道

精通Hibernate之映射继承关系三 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

精通Hibernate之映射继承关系三

时间:2011-08-09

<hibernate-mapping > <class name="mypack.SalariedEmployee" table="SALARIED_EMPLOYEES"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="name" type="string" column="NAME" /> <property name="salary" column="SALARY" type="double" /> <many-to-one name="company" column="COMPANY_ID" class="mypack.Company" /> </class> </hibernate-mapping>

由于Employee类没有相应的映射文件,因此在初始化Hibernate时,只需向Configuration对象中加入Company类、HourlyEmployee类和SalariedEmployee类:

Configuration config = new Configuration(); config.addClass(Company.class) .addClass(HourlyEmployee.class) .addClass(SalariedEmployee.class);

14.1.2 操纵持久化对象

这种映射方式不支持多态查询,在本书第11章的11.1.6节(多态查询)介绍了多态查询的概念。对于以下查询语句:

List employees=session.find("from Employee");

如果Employee类是抽象类,那么Hibernate会抛出异常。如果Employee类是具体类,那么Hibernate仅仅查询EMPLOYEES表,检索出Employee类本身的实例,但不会检索出它的两个子类的实例。本节的范例程序位于配套光盘的sourcecode\chapter14\14.1目录下,运行该程序前,需要在SAMPLEDB数据库中手工创建COMPANIES表、HE表和SE表,然后加入测试数据,相关的SQL脚本文件为\14.1\schema/sampledb.sql。

在chapter14目录下有四个ANT的工程文件,分别为build1.xml、build2.xml、build3.xml和build4.xml,它们的区别在于文件开头设置的路径不一样,例如在build1.xml文件中设置了以下路径:

<property name="source.root" value="14.1/src"/> <property name="class.root" value="14.1/classes"/> <property name="lib.dir" value="lib"/> <property name="schema.dir" value="14.1/schema"/>

在DOS命令行下进入chapter14根目录,然后输入命令:

ant -file build1.xml run

就会运行BusinessService类。ANT命令的-file选项用于显式指定工程文件。BusinessService类用于演示操纵Employee类的对象的方法,例程14-4是它的源程序。

精通Hibernate之映射继承关系三(2)

时间:2011-08-09

例程14-4 BusinessService.java

public class BusinessService{ public static SessionFactory sessionFactory; static{ try{ Configuration config = new Configuration(); config.addClass(Company.class) .addClass(HourlyEmployee.class) .addClass(SalariedEmployee.class); sessionFactory = config.buildSessionFactory(); }catch(Exception e){e.printStackTrace();} } public void saveEmployee(Employee employee) throws Exception{……} public List findAllEmployees() throws Exception{……} public Company loadCompany(long id) throws Exception{……} public void test() throws Exception{ List employees=findAllEmployees(); printAllEmployees(employees.iterator()); Company company=loadCompany(1); printAllEmployees(company.getEmployees().iterator()); Employee

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号