1. 程式人生 > >NHibernate----many-to-one/one-to-many/many-to/one-to-one

NHibernate----many-to-one/one-to-many/many-to/one-to-one


many-to-one:描述多對一的一種資料模型,它指定many一方是不能獨立存在的,我個人認為many-to-one是NHB中保證資料有效性的最有用的一種對映,通過使用many-to-one能有效的防治孤兒記錄被寫入到資料表中。在本文描述的例子中,Student類和Classes類之間是多對一關係.

  通過many-to-one元素,可以定義一種常見的與另一個持久化類的關聯。這種關係模型是多對一關聯。(實際上是一個物件引用。)在對映檔案中用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:屬性名。指出many一方的類用哪個屬性和one一方的類關聯.
2.column:欄位名(可選).指出many一方的類對應的資料表用哪個列和one一方的類對應的資料表關聯(兩表之間存在外來鍵關聯);
3.class:關聯的類的名字(可選 - 預設是通過反射得到屬性型別);
4.cascade:指明哪些操作會從父物件級聯到關聯的物件(可選).cascade屬性允許下列值:: all, save-update, delete, none. 設定除了none以外的其它值會傳播特定的操作到關聯的(子)物件中。
5.outer-join:當設定hibernate.use_outer_join

的時候,對這個關聯允許外連線抓取(可選 - 預設為 auto).outer-join引數允許下列三個不同值: auto(使用外連線抓取關聯(物件),如果被關聯的物件沒有代理(proxy) ),true(一直使用外連線來抓取關聯),false(永遠不使用外連線來抓取關聯);
6.update,insert:指定對應的欄位是否在用於UPDATE 和/或 INSERT的SQL語句中包含。如果二者都是false,則這是一個純粹的“外源性(derived)”關聯,它的值是通過對映到同一個(或多個)欄位的某些其他屬性得到的,或者通過trigger(除法器),或者是其他程式(可選 - 預設為 true
7.property-ref:指定關聯類的一個屬性,這個屬性將會和本外來鍵相對應。如果沒有指定,會使用對方關聯類的主鍵(可選).property-ref屬性只應該用來對付老舊的資料庫系統,可能出現外來鍵指向對方關聯表的是個非主鍵欄位(但是應該是一個惟一關鍵字)的情況。這是一種十分醜陋的關係模型。比如說,假設Product類有一個惟一的序列號,它並不是主鍵;
8.access:NHibernate 用來訪問屬性的策略(可選 - 預設為property
9.unique:允許產生外來鍵列唯一約束的資料庫定義語言(DDL)(可選)

舉例一對一關係

<one-to-one name="UserCenterUnique"  class="Point.Data.Domain.UserCenter,Point.Data" cascade="none" property-ref="Member" />
  </class>