现在的位置: 首页 > 综合 > 正文

NHibernate学习笔记(二):one-to-one关系映射

2013年02月20日 ⁄ 综合 ⁄ 共 4036字 ⁄ 字号 评论关闭
本文的内容:
1.介绍NH如何处理对象间one-to-ont的映射关系;

经验教训:
1.操作一对一关联关系中的一个对象时,得在程序中指定如何与另一个对象关联,如在Student类中写this.NativePlace.Student = this;
2.在为类写映射文件时,必须指定类的具体的名称空间,若则运行时会出现"找不到***映射文件"的问题;
  这两点都困扰了我好长一段时间,应该要引起注意.

点击下载本文相关代码(可在上篇代码的基础上做修改)
one-to-one:
NH中处理一对一关联的方式有两种:
1.主键关联
2.惟一外键关联

本文使用主键关联处理一对一的关系。

  主键关联不需要额外的表字段;两行是通过这种一对一关系相关联的,那么这两行就共享同样的主关键字值。所以如果你希望两个对象通过主键一对一关联,你必须确认它们被赋予同样的标识值!

  持久化对象之间一对一的关联关系是通过one-to-one元素定义的。

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

  以下是对one-to-one元素各属性的说明:
  1.name:属性的名字
  2.class:(可选 - 默认是通过反射得到的属性类型): 被关联的类的名字
  3.cascade:(可选) 表明操作是否从父对象级联到被关联的对象
  4.constrained:(可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响Save()Delete()在级联执行时的先后顺序(也在schema export tool中被使用)
  5.outer-join:(可选 - 默认为 auto):当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取
  6.property-ref:(可选): 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键
  7.access:(可选 - defaults to property): NHibernate 用来访问属性的策略

本文所涉及的类说明:
其中BizObject、User、ObjectBroker、Sessions等四个类就是
NHibernate学习笔记(一):初识NHibernate这篇文章定义的。
Student类和NativePlace类是一对一的双向关联关系:类Student通过属性NativePlace关联类NativePlace;类NativePlace通过属性Student关联类Student。

类Student的代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace NHibernateTest
{
    
public class Student : User
    
{
        
fields

        
constructors

        
properties

        
methors
    }

}

  在每次操作Student对象时,都得指定NativePlace.Student,如:this.NativePlace.Student = this;如果没写这一行运行时会出现“could not find class:NativePlace”(我就在写卡了好久)

类NativePlace的代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace NHibernateTest
{
    
public class NativePlace : BizObject
    
{
        
fields

        
properties

抱歉!评论已关闭.