对映射的理解?
有两种方法可以映射一对一的关系。
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;