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

时间:2009-10-05 16:02:45

标签: nhibernate

我在NHibernate中映射了两个类:Dragon及其子类FierceDragon,其中存储了一些FierceDragon存储在名为Dragons的表中。当我运行像from Dragon...这样的HQL查询时,我每行返回两个对象:预期FierceDragon和普通Dragon,它是FierceDragon的副本(尽可能;自然它缺少FierceDragon的额外FerocityTimeSinceLastMeal属性。特别是,他们的ID是相同的。当我做from FierceDragon时,我只获得FierceDragon个,没有额外的副本,但这对我来说无效。

为什么会发生这种情况,我该如何预防?

2 个答案:

答案 0 :(得分:1)

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

查看thisthis文章。

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

答案 1 :(得分:0)

神秘解决了;我以为我只是映射FierceDragon,但不,我也将Dragon映射到表Dragons。不知道为什么NH在这种情况下做了那个特别的事情,但显然修复是,你知道,不是将单独的类映射到同一个表。或者,如果你这样做,至少给NH一些区分数据库中两者的方法。