.NET 企业库 知识分享--知识产生力量,成功源于分享!
RSS

导航







专业.NET技术社区

专业.NET技术社区


快速搜索

高级搜索 »

注意:此页面是NHibernate 1.0.1 中文文档的一部分。

通过many-to-one元素,可以定义一种常见的与另一个持久化类的关联。这种关系模型是多对一关联。(实际上是一个对象引用。)

<many-to-one
        name="propertyName"(1)
        column="column_name"(2)
        class="ClassName"(3)
        cascade="all|none|save-update|delete"(4)
        outer-join="true|false|auto"(5)
        update="true|false"(6)
        insert="true|false"(7)
        property-ref="propertyNameFromAssociatedClass" (8)
        access="field|property|ClassName"(9)
        unique="true|false" (10)
/>

(1) name: 属性名。

(2) column (可选):字段名。

(3) class (可选 - 默认是通过反射得到属性类型): 关联的类的名字。

(4) cascade (可选): 指明哪些操作会从父对象级联到关联的对象。

(5) outer-join (可选 - 默认为 auto): 当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。

(6) update, insert (可选 - 默认为 true)指定对应的字段是否在用于UPDATE 和/或 INSERT的SQL语句中包含。如果二者都是false,则这是一个纯粹的“外源性(derived)”关联,它的值是通过映射到同一个(或多个)字段的某些其他属性得到的,或者通过trigger(除法器),或者是其他程序。

(8) property-ref: (可选)指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键。

(9) access (可选 - 默认为property): NHibernate 用来访问属性的策略。

(10) unique (可选):允许产生外键列唯一约束的数据库定义语言(DDL)。

cascade属性允许下列值:: all, save-update, delete, none. 设置除了none以外的其它值会传播特定的操作到关联的(子)对象中。参见后面的“Lifecycle Objects(自动管理生命周期的对象)”。

outer-join参数允许下列三个不同值:

  • auto (默认) 使用外连接抓取关联(对象),如果被关联的对象没有代理(proxy)
  • true 一直使用外连接来抓取关联
  • false 永远不使用外连接来抓取关联

一个典型的简单many-to-one声明例子:

<many-to-one name="Product" class="Product" column="PRODUCT_ID" />

property-ref属性只应该用来对付老旧的数据库系统,可能出现外键指向对方关联表的是个非主键字段(但是应该是一个惟一关键字)的情况。这是一种十分丑陋的关系模型。比如说,假设Product类有一个惟一的序列号,它并不是主键。(unique属性控制NHibernate通过SchemaExport工具生成DDL的过程。)

<property name="SerialNumber" unique="true" type="String" column="SERIAL_NUMBER" 

那么关于OrderItem 的映射可能是:

<many-to-one name="Product property-ref="SerialNumber" column="PRODUCT_SERIAL_NUMBER" />

当然,我们决不鼓励这种用法。

顶部
.NET 藏经阁 | | 版权所有 ©2008 entlib.net.cn