用户操作
[即时聊天] [发私信] [加为好友]
lcj8ID:lcj8
34015次访问,排名3728(-2),好友0人,关注者3人。
lcj8的文章
原创 478 篇
翻译 0 篇
转载 0 篇
评论 23 篇
最近评论
incredible_haha:值得学习!
incredible_haha:值得学习!
incredible_haha:值得学习
haiyou04:您好,我是“项目管理者联盟(www.mypm.net)”的编辑,拜读了您的博客作品,很精彩。

"项目管理者联盟"是项目管理人士交流的平台,在此邀请您前去开通个人博客,畅谈心得感悟,结交天涯同路人,共同关注项目管理事业的发展!

我们可以为您提供博客搬家服务,在“项目管理者联盟”建立一个相同内容的博客,然后再交由您打理,以免去您不必要的麻烦。
haiyou04:
您好,我是“项目管理者联盟(www.mypm.net)”的编辑,拜读了您的博客作品,很精彩。

"项目管理者联盟"是项目管理人士交流的平台,在此邀请您前去开通个人博客,畅谈心得感悟,结交天涯同路人,共同关注项目管理事业的发展!

我们可以为您提供博客搬家服务,在“项目管理者联盟”建立一个相同内容的博客,然后再交由您打理,以免去您不必要的麻烦……
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 精通Hibernate之映射继承关系八 收藏

    新一篇: Memcached学习笔记——windows上初步使用  | 旧一篇: 精通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="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应用的编程提供方便。

    发表于 @ 2008年07月02日 10:02:00|评论(loading...)|编辑|收藏

    新一篇: Memcached学习笔记——windows上初步使用  | 旧一篇: 精通Hibernate之映射继承关系七(图)

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © lcj8