数据加载中...
Welcome to javafans club
网站刚开 , 谢谢大家的到来..
当前位置| 主页>Java技术资讯>Java新闻>

精通 Grails: 使用 Ajax 实现多对多关系

2008-07-15 作者: 来源: 阅读
在 Web 应用程序中,多对多(m:m)关系很难处理。在精通 Grails系列的这一期文章中,Scott Davis 将向您展示如何在 Grails 中成功实现 m:m 关系。了解如何通过 Grails 对象关系映射(Grails Object Relational Mapping,GORM)API 和后端数据库处理多对多关系。学习如何使用 Ajax(Asynchronous JavaScript + XML)流线化用户界面。

软件开发就是使用代码来模拟现实世界。例如,书籍都有作者和出版商。在 Grails 应用程序中,要为每个元素创建一个域类。GORM 为每个类创建对应的数据库表,搭建功能(scaffolding)提供基本的 Create/Retrieve/Update/Delete (CRUD) Web 界面。

接下来定义这些类之间的关系。一个出版商通常会出版多部图书,因此出版商和他的图书之间的关系就是一个简单的一对多(1:m)关系:一个Publisher出版多个Book。通过在Publisher类中加入static hasMany = [books:Book],创建 1:m 关系。在Book类中放入static belongsTo = Publisher,可以向关系添加另一个方面 —— 级联更新和删除。如果删除一个Publisher,所有对应的Book也会被删除。

很容易在底层数据库中模拟 1:m 关系型。每个表有一个用作主键的id字段。当 GORM 向 book 表添加一个publisher_id字段时,就在两个表之间建立了一个 1:m 关系。在前端,Grails 也能够很好地处理 1:m 关系。创建一个新Book时,自动生成的(搭建而成)HTML 表单提供一个下拉组合框,将您的选择限制在现有的Publisher列表中。自本系列的第一篇文章以来,我们已经展示了许多 1:m 关系的示例。

现在来看看一个稍微复杂一些的关系 — 多对多(m:m)关系。与BookPublisher之间的关系相比,模拟BookAuthor之间的关系要复杂得多。一部图书可以有多个作者,一个作者也可以编写多部图书。这是一个典型的 m:m 关系。在真实世界中,m:m 关系很常见。一个人可以有多个支票帐号,一个支票帐号也可以由多个人来管理。一个顾问可以为多个项目工作,一个项目也可以有多个顾问。本文将向您展示如何使用 Grails 实现 m:m 关系,我们在本系列中开发的 trip-planner 应用程序上进行构建。在讨论 trip-planner 应用程序之前,我还想谈谈图书的例子,以帮助您理解一个要点。

第三个类

在数据库中,用三个表表示 m:m 关系:前两个表您已经知道了(BookAuthor),第三个是一个连接表(BookAuthor)。GORM 向BookAuthor连接表添加book_idauthor_id,而不是向BookAuthor表添加一个外键。连接表允许将具有一个作者的图书和具有多个作者的图书持久化。它还能够表示编写多部图书的作者。AuthorBook外键的每种惟一组合都会在连接表中有惟一的记录。这种方法具有极大的灵活性:一本书可以有任意数量的作者,而一个作者可以编写任意数目的图书。

Dierk Koenig 曾经告诉我,“如果您认为只有两个对象共享一个简单的多对多关系,那么您对多对多关系的了解还不够透彻。还存在第三个对象,这个对象有其自己的属性和生命周期”。确实如此,BookAuthor之间的关系已经超出了简单连接表的范围。例如,Dierk 是Groovy in Action(Manning Publications,2007 年 1 月)的第一作者。第一作者的身份应该表示为AuthorBook之间的关系中的一个字段。其他各种因素也应如此:作者会按特定顺序在封面上列出;每个作者编写图书的特定章节;而且每个作者的报酬也因贡献不同而异。您可以看到,AuthorBook之间的关系比最初计划的更加微妙。在真实世界中,每个作者都会签订一份合同,使用明确的条款详细描述他与这部图书之间的关系。或许应该创建一个一级类Contract来更好地表示BookAuthor之间的关系。

简单来讲,这意味着一个 m:m 关系实际上就是两个 1:m 关系。如果两个类有可能共享一个 m:m 关系,那么您应该更深入地研究一下,确定出具有两个 1:m 关系的第三个类并显式地定义它。点击看原文


上一篇:Groovy Tip 15 “*”操作符

下一篇:Tuscany SCA Java 1.2和SDO 1.1发布啦
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Sitemap Links Contcat us
© 2008 Javafans.Net 苏ICP备06044966号