NHibernate-通过非PK外键映射集合

本文关键字:映射 集合 PK NHibernate- | 更新日期: 2023-09-27 18:27:56

好的,不要问为什么,但我们对以下类别结构有要求:

  1. 系统定义的根类别的集合(我们使用枚举)
  2. 用户定义的子类别的集合,每个子类别都有一个根类别id外键
  3. 系统定义的子类别的集合

所以,它看起来有点像这样:

系统定义的根类别->用户定义的子类别->系统定义的叶类别->项目

我们需要根据子类别的根类别加载预定义的类别。例如,如果我们有:

车辆->我的蒙迪欧->[车轮,立体声,仪表板]

用户定义的"My Mondeo"子猫将根据其根类别(车辆)获取其子类别。

因此,我们有一种反向的多对多关系:

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>

但是,property ref属性已被弃用,并且无论如何它都会引发"collection is not associated with any session"错误。

有人用nhibernate实现过这样的东西吗。如果是这样的话,有没有一种很好的方法可以做到这一点,或者我应该定义一种方法,在所有叶猫加载后过滤它们吗?

NHibernate-通过非PK外键映射集合

我想您不能使用集合映射的where="属性,除非它接受参数(我对此表示怀疑)

也许你应该选择:

  • 从用户类别到根类别的多对一
  • 从根类别到子类别的集合(一对多)通过这种方式,您可以拥有userCategory.rootCategory.sububCategories

我想用户定义的类别和子类别之间也有一个关系表(从根类别的可用子类别中选择)然后还可以从用户定义的类别到子类别的集合(多对多)

相关文章: