网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.实现Java与C语言接口步骤.
.资源访问的错误方法.
.Java规则引擎的工作原理及其实际.
.java多线程设计模式详解之二.
.Java编程经验技巧 谨慎使用Date和.
.新手入门之j2me学习方法总结--摘.
.JUnit -- A good thing to unit .
.巧妙利用XSLT将XML数据转换成HTML.
.类的设计方法.
.我的Java培训与学习之路.
.给.NET中的Windows窗体加载Xp样式.
.用Java Annotations管理对象.
.Java语言中Timer类的简洁用法(二).
.JavaWS和C#调用.
.Servlet传送对象给Applet使用.
.跟我学Java Swing之游戏设计(1).
.了解Java中的异常机制.
.下载版块安装---jigui2.0中文说明.
.新手入门:J2ME开发环境的安装和使.
.MIN_VALUE 属性.

精通Hibernate之映射继承关系八

发表日期:2008-1-5



  由于关系数据模型不答应一个表的外键同时参照两个表的主键,因此无法对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="string"
  id-type="long"
  cascade="save-update">
  <meta-value value="B" class="ClassB" />
  <meta-value value="C" class="ClassC" />
  <column name="A_TYPE" />
  <column name="A_ID" />
  </any>
  
  元素的meta-type属性指定TABLE_D中A_TYPE字段的类型,id-type属性指定TABLE_D中A_ID字段的类型,子元素设定A_TYPE字段的可选值。在本例中,假如A_TYPE字段取值为"B",表示为ClassB的对象,A_ID字段参照TABLE_B表中的ID主键;假如A_TYPE字段取值为"C",表示为ClassC的对象,A_ID字段参照TABLE_C表中的ID主键。子元素指定TABLE_D表中的A_TYPE字段和A_ID字段,必须先指定A_TYPE字段,再指定A_ID字段。
  
  小结
  
  本章介绍了映射继续关系的三种方式:
  
  继续关系树的每个具体类对应一个表:在具体类对应的表中,不仅包含和具体类的属性对应的字段,还包含和具体类的父类的属性对应的字段。这种映射方式不支持多态关联和多态查询。
  
  继续关系树的根类对应一个表:在根类对应的表中,不仅包含和根类的属性对应的字段,还包含和所有子类的属性对应的字段。
  
  这种映射方式支持多态关联和多态查询,并且能获得最佳查询性能,缺点是需要对关系数据模型进行非常规设计,在数据库表中加入额外的区分各个子类的字段,此外,不能为所有子类的属性对应的字段定义not null约束。
  
  继续关系树的每个类对应一个表:在每个类对应的表中只需包含和这个类本身的属性对应的字段,子类对应的表参照父类对应的表。
  
  这种映射方式支持多态关联和多态查询,而且符合关系数据模型的常规设计规则,缺点是它的查询性能不如第二种映射方式。在这种映射方式下,必须通过表的内连接或左外连接来实现多态查询和多态关联。
  
  在默认情况下,对于简单的继续关系树可以采用根类对应一个表的映射方式。假如必须保证关系数据模型的数据完整性,可以采用每个类对应一个表的映射方式。对于复杂的继续关系树,可以将它分解为几棵子树,对每棵子树采用不同的映射方式。
  
  当然,在设计域模型时,应该尽量避免设计过分复杂的继续关系,这不仅会增加把域模型映射到关系数据模型的难度,而且也会增加在Java程序代码中操纵持久化对象的复杂度。
  
  对于不同的映射方式,必须创建不同的关系数据模型和映射文件,但是域模型是一样的,域模型中的持久化类的实现也都一样。
  
  只要具备Java编程基础知识,就能创建具有继续关系的持久化类,因此本章没有具体介绍这些持久化类的创建过程,在此仅提醒一点,子类的完整构造方法不仅负责初始化子类本身的属性,还应该负责初始化从父类中继续的属性,例如以下是HourlyEmployee类的构造方法:
  
  public class HourlyEmployee extends Employee{
  private double rate;
  
  /** 完整构造方法*/
  public HourlyEmployee(String name, double rate,Company company) {
  super(name,company);
  this.rate=rate;
  }
  
  /** 默认构造方法*/
  public HourlyEmployee() {}
  ……
  }
  
  Hibernate只会访问持久化类的默认构造方法,永远不会访问其他形式的构造方法。提供以上形式的完整构造方法,主要是为Java应用的编程提供方便。
上一篇:精通Hibernate之映射继承关系七(图) 人气:620
下一篇:Web环境 Hibernate数据源问题补充 人气:606
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐