当前位置: 首页 > 图文教程 > Java技术 > Web框架 > 浅谈Hibernate中关联问题

Web框架
Web框架:Struts标记库定制JSP标记
Web框架:简述Ajax技术的那些框架
Web框架:利用列表数据提高开发效率
Web框架:Struts2中声明式异常处理
Web框架:小议Spring的异常处理那点事
Web框架:详谈AOP概念
Web框架:小编浅谈Struts2的Ajax支持
Web框架:Ajax提供的div标签
Web框架:程序员之家七月份Web框架总结
Web框架:浅谈Spring Bean封装机制
Web框架:小编浅谈Struts配置文件
Web框架:小编谈Spring中的AOP 应用
Web框架:Spring的闪亮之处:事务管理
Web框架:浅谈iBATIS的动态映射
Web框架:Hibernate中五个接口那些事
Web框架:Hibernate的ORM与Hibernate的优点
Web框架:Struts2的OGNL
Web框架:Struts中的ActionForm 作为防火墙
Web框架:小编浅谈Struts2中使用JSON插件实现Ajax
Web框架:Aegis绑定那些事

Web框架 中的 浅谈Hibernate中关联问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-23   浏览: 114 ::
收藏到网摘: n/a

在我们的对象模型中,关联描述了实体间的关系。你记得用户,地址和账单详细资料类都是相互关联的。与地址不同,账单详细资料依赖于自身。账单详细资料对象保存到它们自己的表中。在任何对象持续性解决方案中,实体关联的映射与管理都是中心概念。

面向对象的语言使用对象引用和对象引用的集合表示关联。在关系世界里,关联被表示

为外键列,外键是几个表的键值的拷贝。这两种表示之间有些微妙的不同。

对象引用具有固有的方向性,关联是指从一个对象到另一个对象的引用。如果对象间的

关联可以在两个方向上进行导航,你需要定义两次关联,在每个关联类上分别定义一次。

 

 public class User {

private Set billingDetails;

...

}

public class BillingDetails {

private User user;

...

}

 

 

 

另一方面,外键并不通过固有的方向性进行关联。事实上,对关系数据模型来说导航没

有任何意义,因为你可以通过表连接和投射创建任意的数据关联。

实际上,只看Java类不可能确定单向关联的多重度。Java关联可以具有多对多的多重度。

例如,我们的对象模型可能有看起来像这样的:

 

public class User {

private Set billingDetails;

...

}

public class BillingDetails {

private Set users;

...

}

 

另一方面,表关联总是一对多或是一对一的。通过查看外键的定义你可以立刻知道多重

度。下面是一个一对多的关联(或者,从另一个方向看,是多对一的):

USER_ID BIGINT FOREIGN KEY REFERENCES USER

这些是一对一的关联:

 

USER_ID BIGINT UNIQUE FOREIGN KEY REFERENCES USER

BILLING_DETAILS_ID BIGINT PRIMARY KEY FOREIGN KEY REFERENCES USER

 

如果你希望在关系数据库中表示一个多对多的关联,你必须引入一个新表,称为连接表。

这个表不会在对象模型中的任何地方出现。对我们的例子来说,如果我们认为用户和用户的

帐单信息之间为多对多的关系,连接表可以如下定义:

CREATE TABLE USER_BILLING_DETAILS (

USER_ID BIGINT FOREIGN KEY REFERENCES USER,

BILLING_DETAILS_ID BIGINT FOREIGN KEY REFERENCES BILLING_DETAILS

PRIMARY KEY (USER_ID, BILLING_DETAILS_ID)

)