NHibernate-通过非PK外键映射集合
本文关键字:映射 集合 PK NHibernate- | 更新日期: 2023-09-27 18:27:56
好的,不要问为什么,但我们对以下类别结构有要求:
- 系统定义的根类别的集合(我们使用枚举)
- 用户定义的子类别的集合,每个子类别都有一个根类别id外键
- 系统定义的子类别的集合
所以,它看起来有点像这样:
系统定义的根类别->用户定义的子类别->系统定义的叶类别->项目
我们需要根据子类别的根类别加载预定义的类别。例如,如果我们有:
车辆->我的蒙迪欧->[车轮,立体声,仪表板]
用户定义的"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实现过这样的东西吗。如果是这样的话,有没有一种很好的方法可以做到这一点,或者我应该定义一种方法,在所有叶猫加载后过滤它们吗?
我想您不能使用集合映射的where="属性,除非它接受参数(我对此表示怀疑)
也许你应该选择:
- 从用户类别到根类别的多对一
- 从根类别到子类别的集合(一对多)通过这种方式,您可以拥有userCategory.rootCategory.sububCategories
我想用户定义的类别和子类别之间也有一个关系表(从根类别的可用子类别中选择)然后还可以从用户定义的类别到子类别的集合(多对多)