转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
Hibernate 3.0 的规则应用分析         ★★★★

Hibernate 3.0 的规则应用分析

作者:闵涛 文章来源:闵涛的学习笔记 点击数:893 更新时间:2009/4/22 23:29:46
  一、前言

  Hibernate和Spring是两个著名的开源框架,越来越广泛地应用于J2EE应用程序的开发中。虽然它们各自所针对的目标不同,但是它们都有一个共同的特点:依赖性映射。Spring注重于在把对象返回到客户之前,帮助挑选出对象间的依赖性,这样以来大大减少了客户端的编码工作。Hibernate则专注于在把完整的对象模型返回到客户之前,挑选出对象模型描述的依赖性。当直接使用JDBC来把一个数据模型映射成一个对象模型时,我们通常需要编写大量的代码来建造一个对象模型。Hibernate可以帮助消除这种大部分的编码工作。

  Hibernate 2.x提供了基本的表到对象的映射,正常的关联映射(包括一对一,一对多和多对多关系),多态映射,等等。Hibernate 3.x把这种技术又推进了一层-通过使用规则、过滤、子选择等等来加强映射的灵活性-它们提供了良好粒度的解释特性。

  在本文中,我们将向你展示规则的各种不同特性是怎样帮助实现模型转换的。在Hibernate 3.x之前,规则属性只能出现在一个property元素中。虽然你还可以这样做,但是,Hibernate 3.x提供了一个规则属性或元素(其实,在涉及到规则使用时,这两者是等价的),它可以应用在许多元素中,包括discriminator,many-to-one,one-to-one,element,many-to-many,map-key,map-key-many-to-many以及property。这加强了对象-关系(O-R)映射的灵活性,并因此允许对更复杂的数据模型的良好粒度解释。

  大致上有两种场合下,必须使用规则:

  1. 需要规则计算结果的场所。与元素discriminator,element,map-key,map-key-many-to-many及property等一起使用的规则属于这一类型。

  2. 借助于规则的帮助实现联结之目的。与元素many-to-one,one-to-one及many-to-many等一起使用的规则属于这一类型。

  二、类型1:取得一个规则的计算结果

  (一) Discriminator

  在实际的数据模式中,经常有用一个表来描述另外一个表的情况。规则有助于在O-R映射中实现灵活的多态性。

  在图1所示的例子中,共有两个表:Product和ProductRelease。每个产品记录都有一个ProductReleaseID,用于参照它相应的产品发行记录,包括产品发行名、类型、发行日期等。

  在ProductRelease表中一个有趣的属性是SubProductAllowable,其值可以是0或1。值1意味着任何该产品的发行都可以有相应的子产品,而值0意味着不允许有子产品。例如,一些产品由多种子产品配置而成,而一些产品只能是其自身。

  图2显示了一个从该数据模型解释出来的对象模型。其中,嵌套接口定义了getSubProducts和setSubProducts方法。类NestedProduct扩展了基类Product并实现了嵌套接口。一条产品数据记录是属于Product还是属于NestedProduct依赖于它相应的产品发行记录的SubProductAllowable的值。


  为了成功完成这个模型转化,我们使用了一个Hibernate3.x映射,如下:

<hibernate-mapping>
<class name="Product" discriminator-value="0" lazy="false">
 <id name="id" type="long"/>
 <discriminator formula="(select pr.SubProductAllowable from ProductRelease pr where pr.productReleaseID=
productReleaseID)" type="integer" />
 <subclass name="NestedProduct" discriminator-value="1"/>
</class>
</hibernate-mapping>
  如果规则表达式计算结果是0-也就是说,不允许有相应的子产品-那么该对象将是类Product。如果结果是1,该对象将是一个NestedProduct。在表1和表2中,对于Product表中的第一个记录(ProductID=10000001),初始化类将是一个NestedProduct,因为它通过SubProductAllowable=1参考引用一个ProductRelease记录。对于Product表中的第二个记录(ProductID=20000001),初始化类将是Product,因为它通过SubProductAllowable=0参考引用一个ProductRelease记录。

S/N ProductReleaseID SubProductAllowable ... 1 11 1 ... 2 601 0 ...      表格1.表ProductRelease中的记录

S/N ProductID ProductReleaseID ... 1 10000001 11 ... 2 20000001 601 ...       表格2.表Product中的记录


[聊天工具]监视邮件的利器——PopTray3.0  [聊天工具]网易口对口(V3.0 beta Build 563)功能介绍
[系统软件]交叉编译sshd for IXP425 ARM  Platform by MVL 3…  [常用软件]NetMeeting3.0 呼叫之诀窍
[常用软件]秀Time Winamp 3.0b3上手指南  [网页制作]FW - Twist and Fade 3.0 介绍
[Web开发]Eclipse 3.0 上配置JSP开发环境  [Web开发]JDBC 3.0 RowSet, 类似于windows中ADO的编程方式
[JAVA开发]前进:从EJB 2.1到EJB 3.0  [JAVA开发]Struts+Spring+Hibernate组装web应用
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台