您的位置:jsp学习站首页 >> 框架/开源 >> Hibernate >> O/R MAPPING(Hibernate)方法小结

O/R MAPPING(Hibernate)方法小结 (1)

[ 来源:互网络 | 更新日期:2007-09-14 07:08:33 | 浏览次数:14815]
简介:对象之间的关系:1.依赖:依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系,并且是短期的。我们的过程与对象往往依赖于我们的实体域对象。如在struts的action中调用模型层的方法。2.关联它使一个类指到另一个类的属性。长期的3.聚合聚合关系是关联关系的一种,是强的关联关系。聚合是整体和部分之间的关系。4.组合也叫合成关系,组成关系是关联关系的一种,是比聚合关系强的关系。对象负责代表部分的对象的生命周期。注:既然聚合,组合关系属于关联关系,那么如何区分一般关联关系,聚合关系和组合关系呢?一般关联:只要一个对象联系到另外一个对象就形成了关联关系。如:人和他的猫,黑豹乐队和窦唯,PC机和显示器。聚合关系:一种强关联关系,它要求有部分和整体的关系,并且没有了整体部分也可以独立存在。在上面三个例子中人和它的猫显然没有部分和整体的关系,所以只能是一般的关联关系。而黑豹乐队和窦唯,窦唯等人组成了黑豹乐队即:窦唯和黑豹是整体和部分的关系。而窦唯脱离了黑豹(早就离开了)更或者黑豹不存在了那么窦唯仍然可以以音乐人的身份存在(即对象仍然可以独立存在)所以它属于聚合关系。组成关系是可以共享的。(窦唯也可以加入其他乐队)。组合关系:一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期,组成关系是不能共享的。如:PC机和显示器的关系。我觉得:如果两个实体是整体和部分的关系,那么它们到底是聚合还是组合,这取决于你的需求。比如说:PC机和显示器的关系,如果你的系统中,显示器脱离了PC机就不存在意义了,也可以说:所有显示器的访问都是通过PC机进行的,那么你可以把关系设定为组合(如你在为一个只买品牌机的代理商作系统你可能是可以这么作的)。如果你的显示器脱离的PC机仍然可以独立存在,也就是说在系统中可以直接访问显示器对象,那么你可以将关系设为聚合(如你在为一个买散件的代理商作系统你可能是可以这么作的)5.继承这个我不想多讲了,用过面向对象的语言都应该知道。

  一.对象之间的关系:

1.依赖:

依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系,并且是短期的。我们的过程与对象往往依赖于我们的实体域对象。如在struts的action中调用模型层的方法。

2.关联

它使一个类指到另一个类的属性。长期的

3.聚合

聚合关系是关联关系的一种,是强的关联关系。聚合是整体和部分之间的关系。

4.组合

也叫合成关系,组成关系是关联关系的一种,是比聚合关系强的关系。对象负责代表部分的对象的生命周期。

注:既然聚合,组合关系属于关联关系,那么如何区分一般关联关系,聚合关系和组合关系呢?

一般关联:只要一个对象联系到另外一个对象就形成了关联关系。如:人和他的猫,黑豹乐队和窦唯,PC机和显示器。

聚合关系:一种强关联关系,它要求有部分和整体的关系,并且没有了整体部分也可以独立存在。在上面三个例子中人和它的猫显然没有部分和整体的关系,所以只能是一般的关联关系。而黑豹乐队和窦唯,窦唯等人组成了黑豹乐队即:窦唯和黑豹是整体和部分的关系。

而窦唯脱离了黑豹(早就离开了)更或者黑豹不存在了那么窦唯仍然可以以音乐人的身份存在(即对象仍然可以独立存在)所以它属于聚合关系。组成关系是可以共享的。(窦唯也可以加入其他乐队)。

组合关系:一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期,组成关系是不能共享的。如:PC机和显示器的关系。

我觉得:如果两个实体是整体和部分的关系,那么它们到底是聚合还是组合,这取决于你的需求。比如说:PC机和显示器的关系,如果你的系统中,显示器脱离了PC机就不存在意义了,也可以说:所有显示器的访问都是通过PC机进行的,那么你可以把关系设定为组合(如你在为一个只买品牌机的代理商作系统你可能是可以这么作的)。

如果你的显示器脱离的PC机仍然可以独立存在,也就是说在系统中可以直接访问显示器对象,那么你可以将关系设为聚合(如你在为一个买散件的代理商作系统你可能是可以这么作的)

5.继承

这个我不想多讲了,用过面向对象的语言都应该知道。

二.关系数据库的关系

一对一

一对多

多对一

多对多

三.o/r mapping策略

1.继承:

对于继承关系一般有三种策略:

策略1继承树的每个类对应一个表

<joined-subclass >//共享主键

策略2继承树的根类对应一个表

<discriminator ><subclass >//需要添加一个识别字段

策略3继承树的叶子类对应一个表,不支持多态查询

2.关联

2.1 一对一

一半有两种策略:

策略1:唯一的外键

<many-to-one>+unique="true" (唯一的外键)
<one-to-one>

策略2:共享主键

<one-to-one>
<one-to-one><constrained="true"> //既是主键又是外键

注意:生成方式需要用:foreign

2.2 一对多(无需多说)

2.3 多对一(无需多说)

2.4 多对多

策略1:A,B表多对多的关系需要引入C表。

C表中的所有属性即为主键又为外键分别参照A,B两表。

C表中不可以有其他属性

策略2:将多对多拆分成两个一对多:

A,B对象多对多的关系需要引入C对象。使得A,B两对象与C对象的关系为一对多。对应数据库中:A,B表多对多的关系需要引入C表。A,B两表与C表的关系为一对多。

C表又自己的主键

C表中又非主键的外键分别参
[1] [2]
Tags:关键字:O/R MAPPING(Hibernate)方法小结
责任编辑:glen