NHibernate查询返回目标对象的多个副本

NHibernate查询返回目标对象的多个副本,nhibernate,Nhibernate,我在NHibernate中映射了两个类:Dragon及其子类firegeragon,其中一些firegeragon存储在名为Dragons的表中。当我运行HQL查询时,比如从Dragon…我每行返回两个对象:预期的FeareDragon和一个普通的Dragon,它是FeareDragon(在可能的范围内;它自然缺少猛龙额外的凶猛和TimesInclastDine属性)。特别是,它们的ID是相同的。当我从猛龙获得猛龙时,我只得到了猛龙,没有额外的副本,但这对我一般来说不起作用 为什么会发生这种情况

我在NHibernate中映射了两个类:
Dragon
及其子类
firegeragon
,其中一些
firegeragon
存储在名为
Dragons
的表中。当我运行HQL查询时,比如从Dragon…我每行返回两个对象:预期的
FeareDragon
和一个普通的
Dragon
,它是
FeareDragon
(在可能的范围内;它自然缺少
猛龙
额外的
凶猛
TimesInclastDine
属性)。特别是,它们的ID是相同的。当我从猛龙获得
猛龙
时,我只得到了
猛龙
,没有额外的副本,但这对我一般来说不起作用


为什么会发生这种情况,我怎样才能防止它呢?

谜团已经解开了;我以为我只是在映射
猛龙
,但不是,我也在映射
猛龙
,两者都映射到表
猛龙
。我不确定NH在这种情况下为什么会做那种特殊的事情,但很明显,解决办法是,你知道,不是将单独的类映射到同一个表。或者,如果您这样做了,至少给NH一些方法来区分数据库中的这两个表。

如果您正确创建映射,这应该不会造成问题。 使用NHibernate将类层次结构映射到DB有3种不同的方法

签出并提交一篇文章


您可以将Dragon和FeareDragon映射到同一个表,但是,在这种情况下,您的表应该有一些可为空的列,以便能够存储FeareDragon的其他属性。因为您谈论的是一个表,我想您想使用“每个类层次结构表”映射策略吗?

您可以发布精确的查询吗?不,我可以正在使用“映射两个类而不知道它”策略。当我对Dragon发出一个查询时,NH观察到Dragon及其子类Dragon被映射,并发出两个select语句,每个语句一个,幸好没有意识到它们共享一个表。