从来没有问过这里的一个问题,我会尽量简洁地说明这一点。NHibernate一对多连接子类
我有一个食谱类,其中包含三种不同类型的成分用途列表。这些类都从基础IngredientUse继承。所以映射如下所示:
<class name="IngredientUse" table="IngredientUses">
<id name="Id" type="Int64" column="Id">
<generator class="native"/>
</id>
<!--some other properties-->
<property name="RecipeId" column="RecipeId"/>
<joined-subclass name="AdditionUse" table="AdditionUses">
<key column="Id" foreign-key="FK_AdditionUses_IngredientUses"/>
<many-to-one name="AdditionUsed" column="AdditionUsed" class="Addition" foreign-key="FK_AdditionUses_Additions"/>
</joined-subclass>
</class>
这里引起问题的是RecipeId。从配方,我有不同的成分类型的用途,像这样定义的三个不同的列表:
<bag name="AdditionsUsed" cascade="all" lazy="false">
<key column="RecipeId"/>
<one-to-many class="AdditionUse"/>
</bag>
现在,我遇到了问题试图加载这些列表。它与继承有关。当我看到生成的SQL,我看到:
SELECT additionsused0_.RecipeId as RecipeId1_
--other columns not really important
FROM AdditionUses additionsused0_
inner join IngredientUses additionsused0_1_
on additionsused0_.Id=additionsused0_1_.Id
WHERE [email protected]; @p0 = '11'
公告称,其寻找在子类中的RecipeId表中,而不是在列实际上包含基表。我知道我可以为每种成分类型定义一个单独的表格,但是这会导致我的问题,因为在某些情况下(即定价),我不需要子类表中的额外列,并且希望能够一次加载所有成分到同一个列表中。
我确定我必须在这里丢失一些东西,认为有人更熟悉NHibernate在这个网站上可能会认出它的权利。
在此先感谢。
编辑:如果我不清楚我想做什么,这张图可能有帮助(原谅我的伪劣UML,希望它不会浑水)。还有一个成分基类,以及相同的亚类。
多数民众赞成的东西,我不想映射到AdditionUse表映射实体,我想映射到Ingredient使用表格,使用AdditionUse作为过滤器和额外信息。我想我需要放弃NHibernate,或者重新思考我的表是如何设置的。感谢您的回应。 – AlexCuse 2009-03-01 14:57:57