在域模型模型中关联关系的表现形式主要有:
1、一对多的单向关联;
2、多对一的单向关联;
3、一对多的双向关联;
而在关系型数据库中,由于只存在外键参照关系
且总是由“many”的一方参照"one"的一方,这就决定
了关系数据库实际上只支持多对一或一对一的单向关联。
这样的好处是可以消除数据的冗余。
--------------------------------------------
建立多对一的单向关联关系
假如有如下关系模型
OBJECT_As table OBJECT_Bs table
----------------- ---------------------
ID <PK> <----------------------------OBJECT_A_ID <FK>
OBJECT_A_ATTRS ID <PK>
OBJECT_B_ATTRs
这里建立OBJECT_B到OBJECT_A的多对一单向关联,为了表明他们之间的这种关系
在OBJECT_B的OBJECT_B_ATTRs属性集合中需要有一个为OBJECT_A类型<obj_A>。而OBJECT_A
的属性集合则只需要与表OBJECT_As的属性集合对应即可。
同时需要注意的是在OBJECT_B类中需要有对应类型为OBJECT_A的get/set方法。
在持久化描述文件中我们可以描述OBJECT_B.hbm.xml存在的这种关系如下:
<many-to-one
name="obj_A"
column="OBJECT_A_ID"
class="The full name of OBJECT_A"
not-null="true"
...
Other attributes List
/>
当然现在有多种可选择的工具来方便的生成*.hbm.xml格式的描述文件XDoclet是一个不错的选择。
如果我们是从*.hbm.xml开始的,则可以使用hbm2java来方便的生成POJO类 。我们可以使用hbm2ddl
来生成SQL脚本文件。
----------------------------------------------------------------
下面介绍一对多双向关联
我们依旧沿用上面的模型,假如现在需要收集和OBJECT_A对应的所有OBJECT_B对象,我们可以在
OBJECT_A类中加入如下属性Set object_Bs来存放和OBJECT_A的ID对应的OBJECT_B对象。然后在
OBJECT_A类中加入get/setObject_Bs()方法。
这样我们只须在上面的模型中的OBJECT_A.hbm.xml加入如下描述就可以建立这种一对多双向关联。
<set name="object_Bs"
cascade="save-update"
>
<key column="OBJECT_A_ID"/>
<one-to-many class="The full name of OBJECT_B"/>
</set>
这样就算完成了,需要注意在书写描述文件时根据需要取舍not-null和cascade属性并为其合理取值,
他们的本质概念和关系数据库的非空约束和级联操作相同。
1、一对多的单向关联;
2、多对一的单向关联;
3、一对多的双向关联;
而在关系型数据库中,由于只存在外键参照关系
且总是由“many”的一方参照"one"的一方,这就决定
了关系数据库实际上只支持多对一或一对一的单向关联。
这样的好处是可以消除数据的冗余。
--------------------------------------------
建立多对一的单向关联关系
假如有如下关系模型
OBJECT_As table OBJECT_Bs table
----------------- ---------------------
ID <PK> <----------------------------OBJECT_A_ID <FK>
OBJECT_A_ATTRS ID <PK>
OBJECT_B_ATTRs
这里建立OBJECT_B到OBJECT_A的多对一单向关联,为了表明他们之间的这种关系
在OBJECT_B的OBJECT_B_ATTRs属性集合中需要有一个为OBJECT_A类型<obj_A>。而OBJECT_A
的属性集合则只需要与表OBJECT_As的属性集合对应即可。
同时需要注意的是在OBJECT_B类中需要有对应类型为OBJECT_A的get/set方法。
在持久化描述文件中我们可以描述OBJECT_B.hbm.xml存在的这种关系如下:
<many-to-one
name="obj_A"
column="OBJECT_A_ID"
class="The full name of OBJECT_A"
not-null="true"
...
Other attributes List
/>
当然现在有多种可选择的工具来方便的生成*.hbm.xml格式的描述文件XDoclet是一个不错的选择。
如果我们是从*.hbm.xml开始的,则可以使用hbm2java来方便的生成POJO类 。我们可以使用hbm2ddl
来生成SQL脚本文件。
----------------------------------------------------------------
下面介绍一对多双向关联
我们依旧沿用上面的模型,假如现在需要收集和OBJECT_A对应的所有OBJECT_B对象,我们可以在
OBJECT_A类中加入如下属性Set object_Bs来存放和OBJECT_A的ID对应的OBJECT_B对象。然后在
OBJECT_A类中加入get/setObject_Bs()方法。
这样我们只须在上面的模型中的OBJECT_A.hbm.xml加入如下描述就可以建立这种一对多双向关联。
<set name="object_Bs"
cascade="save-update"
>
<key column="OBJECT_A_ID"/>
<one-to-many class="The full name of OBJECT_B"/>
</set>
这样就算完成了,需要注意在书写描述文件时根据需要取舍not-null和cascade属性并为其合理取值,
他们的本质概念和关系数据库的非空约束和级联操作相同。