一、以主键关联
所谓以主键关联,就是从表的主键同时又作为外键参考主表的主键,这种将一个字段即作为主键又作为外键的情况,只能在一对一的关联文件中实现。
因为主键的值是不允许重复的,并且在持久化类映射文件的双方都是通过<one-to-one>元素实现映射。
在User.hbm.xml文件中的映射PurviewPK类的实例的代码如下:
<one-to-one name="purviewPK" class=“PurviewPK” cascade="all" lazy="false">
属性说明:
①name:要映射的实例名称
②class:要映射的实例类型
③cascade:设定级联操作的权限,建议在一对一关联中主类对关联类的级联操作权限不要低于all.
④lazy:设定是否采用延迟加载,这里不采用延迟加载
在PurviewPK.hbm.xml文件中映射User类的实例代码如下:
<one-to-one name="user" class="User" constrained="true" lazy="false">
属性说明:
constrained:constrained属性设为true,说明该映射文件所映射表的主键同时作为外键,参照关联类对应表的主键。
因为映射文件PurviewPK.hbm.xml所映射表的主键同时作为外键,所以需要在映射文件中配置OID的生成方式,代码如下:
<id name="id" column="id" type="int" access="field">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<generator>元素的class属性设为foreign,说明该主键同时为外键,所以主键的生成方式将参考外键。
<param>元素用来设定外键的参考信息,name属性的值property说明参考信息的类型为属性,user为本映射类的关联类的实例名称。
二、以外键关联
所谓以外键关联,就是从表的主键并不作为外键参考主表的主键,而是将其他字段作为外键参考主表的主键,以外键的方式可以建立各种关联关系,但是在持久化类映射文件中有一方是通过<one-to-one>元素实现映射的,而另一方是通过<many-to-one>元素实现映射的。
在User.hbm.xml文件中的映射PurviewPK类的实例的代码如下:
<one-to-one name="purviewPK" class=“PurviewPK” cascade="all" lazy="false">
在PurviewPK.hbm.xml文件中映射User类的实例代码如下:
<many-to-one name="user" class="User" column="user_id" unique="true" lazy="false">
属性说明:
column:关联表的外键。
unique:unique等于true,说明该映射文件所映射类的实例只与一个关联类的实例对应。