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標籤描述此種關係.
name="propertyName"(1)
column
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
/>
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>