2012-03-16 22 views
0

好了,不要問爲什麼,但我們有以下類別結構的要求:NHibernate的 - 通過映射集非PK外鍵

  1. 系統定義的根類的集合(我們使用這些枚舉)
  2. 用戶自定義的子類的集合,每一個根類別ID外鍵
  3. 系統定義的細分子類別

左右的集合,它看起來有點像這樣:

Sys系統定義的根類別 - >用戶定義子類別 - > SYS定義葉類 - >項

我們需要加載基於子類的根類的預定義的類別。例如,如果我們有:

車輛 - >我的蒙迪歐 - > [輪,音響,儀表板]

用戶定義的「我的蒙迪歐」子貓會取它是基於其子類別的根類別(汽車)。

所以我們有這樣的反向許多一對多的關係怎麼回事:

rootCats --1---------0..*-- user-defined cats 
    |        | 
    1        0..n 
    |        | 
    |        | 
    |        | 
    0..*        | 
    |        | 
pre-defined cats--1------------------ 

我試圖在NHibernate中有以下映射這樣的:

<set name="PreDefinedSubCategories" lazy="false" cascade="none" mutable="false"> 
    <key column="vaultCategoryId" property-ref="Category" /> 
    <one-to-many class="PreDefinedVaultCategory" /> 
</set> 

但是,屬性-ref屬性被棄用,無論如何它拋出一個'集合沒有關聯任何會話'的錯誤。

有沒有人使用nhibernate實現過類似的東西。如果是這樣,是否有一個很好的做法,或者我應該定義一個方法來過濾所有的葉貓後,他們已經加載?

回答

0

我猜你不能使用where =「」集合映射的屬性,除非它接受的參數(我懷疑如此)

也許你應該去:

  • 一個多TO-一個從你的用戶類別的根類別
  • 集合(一到多)從根類別到您的細分子類別 這種方式,您可以有userCategory.rootCategory.subsubCategories

我想你的用戶定義的類別和你的子子類別之間也有一個關係表(從根類別的可用子子類別中選擇) 然後再去一個集合(多對多)從用戶定義的類別到您的子類別