第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)
单向关联是最常用的也是最难正确使用的。在本章中会逐个经历规范的案例, 从单向映射开始,然后涉及双向的案例。我们会在所有的例子中使用Person
和 Address
。例子中没有包括命名空间和程序集,我们把关注点放在重要的方面。
我们通过是否使用表连接和多样性(单向或双向)分类关联。
在传统的数据模型中允许为空的外键是不实用的,所以我们的例子中没有使用允许为空的外键。在NHibernate中这不是必须的,如果你删除空值的约束, 映射会照常工作。
双向的一对多(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 )