对映射的理解?

一对一

有两种方法可以映射一对一的关系。

1唯一外键:

从两个实体中选择一个更注重外键的实体,在保存外键的实体映射文件中,使用

1).指明代表实体中关系的属性名,将其作为外键并命名。

2).然后将多对多关系设置为属性。

持有主键的一方还做两件事:

1).指出实体中代表实体关系的属性,

2).指出该属性被该实体引用,即该属性所引用的实体中代表实体关系的属性值。

2 ***享受主键:

双方使用

1).指明实体关系属性,

2).constrained="true "

3).制定一个外键生成策略,外键是主键,设置id的时候就要设置。

对方只需要设置实体关系属性。

两个一对多

数据库中的表之间的关系应该由一方维护,外键应该在多方设置。

一面使用

1.指明实体关系属性

2.将其作为外键,并设置外键字段的名称。

不止一个缔约方使用

1.使用

2.外部集中的实体声明类型,带有

3.因为一方维护关系,所以有必要指明维护关系的字段

在一对多中,关系是由一方维护的,有时是由多方维护的。这时候主动权就用inverse="true "转移给了对方。

三。多对多

多对多关系是两个多对一关系的叠加,我们可以从中勾画出两个多对一关系。

两边基本对称

1.使用set标签表示引用的实体关系属性和生成的实体关系表。

2.使用key标记来指示与实体关系表中的实体相对应的外键。

3.用多对多标签声明集合中实体的类型。

四种成分

组件和实体的关系是一个组合,也可以说是实体的一部分,所以组件和实体的映射只是生成一个表。

一对一组件映射:

& ltcomponent name = " addr " & gt

& ltproperty name = " postcode "/& gt;

& ltproperty name = " city "/& gt;

& ltproperty name = " street "/& gt;

& lt/component & gt;

一对多组件映射:

& ltset name = " addr " table = " t _ addr " & gt;

& ltkey column="FID" />

& ltcomposite-element class = " Address " >

& ltproperty name = " zip code "/& gt;

& ltproperty name = " city "/& gt;

& ltproperty name = " street "/& gt;

& lt/composite-element & gt;

& lt/set & gt;

动词 (verb的缩写)继承映射

有三种形式的继承映射。

* *一类一表* *

抽象类需要建立一个表。

& lt已加入-子类名称= "子类名称"表= "子类表" >

& ltKey column= "约束父表主键的子类表中的外键"/& gt;

& ltProperty name= "在子类中定义的属性名"/& gt;

& lt/joined-subclass & gt;

* *一个实体类和一个表* *

抽象类不需要建表。

用abstract="true "隐藏抽象类的表

& ltunion-子类名称= "子类名称"表= "子类表" >

& ltProperty name= "在子类中定义的属性名"/& gt;

& lt/union-subclass & gt;

* *一个类库和一个表* *

只建立了一个抽象类表。

要在抽象类中构建表,只需使用

& lt子类名称= "子类名称"

鉴别器-value= "鉴别器字段值" >

& ltProperty name= "在子类中定义的属性名"/& gt;

& lt/subclisss & gt;