第6章 关联映射

目录

简介
单向关联
多对一(many to one)
一对一(one to one)
一对多(one to many)
使用表连接的单向关联
一对多(one to many)
多对一(many to one)
一对一(one to one)
多对多(many to many)
双向关联
一对多(one to many) / 多对一(many to one)
一对一(one to one)
使用表连接的双向关联
一对多(one to many) / 多对一(many to one)
一对一(one to one)
多对多(many to many)
简介

单向关联是最常用的也是最难正确使用的。在本章中会逐个经历规范的案例, 从单向映射开始,然后涉及双向的案例。我们会在所有的例子中使用PersonAddress。例子中没有包括命名空间和程序集,我们把关注点放在重要的方面。

我们通过是否使用表连接和多样性(单向或双向)分类关联。

在传统的数据模型中允许为空的外键是不实用的,所以我们的例子中没有使用允许为空的外键。在NHibernate中这不是必须的,如果你删除空值的约束, 映射会照常工作。

单向关联

多对一(many to one)

一对一(one to one)

一对多(one to many)

使用表连接的单向关联

一对多(one to many)

多对一(many to one)

一对一(one to one)

多对多(many to many)

双向关联

一对多(one to many) / 多对一(many to one)

双向的一对多(one-to-many)关联是普通的关联类型。(这是标准的parent/child关系。)

<class name="Person">
 <id name="Id" column="personId">
  <generator class="native" />
 </id>
 <many-to-one name="Address"
  column="addressId"
  not-null="true"
 />
</class>
<class name="Address">
 <id name="Id" column="addressId">
  <generator class="native" />
 </id>
 <set name="People" inverse="true">
  <key column="addressId" />
  <one-to-many class="Person" />
 </set>
</class>
create table Person 
(
 personId bigint not null primary key,
 addressId bigint not null
)
create table Address
(
 addressId bigint not null primary key
)
 
一对一(one to one)

使用表连接的双向关联

一对多(one to many) / 多对一(many to one)

一对一(one to one)

多对多(many to many)