我在NHibernate中映射了两个类:Dragon
及其子类FierceDragon
,其中存储了一些FierceDragon
存储在名为Dragons
的表中。当我运行像from Dragon...
这样的HQL查询时,我每行返回两个对象:预期FierceDragon
和普通Dragon
,它是FierceDragon
的副本(尽可能;自然它缺少FierceDragon
的额外Ferocity
和TimeSinceLastMeal
属性。特别是,他们的ID是相同的。当我做from FierceDragon
时,我只获得FierceDragon
个,没有额外的副本,但这对我来说无效。
为什么会发生这种情况,我该如何预防?
答案 0 :(得分:1)
如果您正确地创建了地图,那不应该造成问题。 使用NHibernate将类层次结构映射到DB有3种不同的方法。
您可以将Dragon和FierceDragon映射到同一个表,但是,在这种情况下,您的表应该有一些可以为空的列,以便能够存储FierceDragon的其他属性。既然你在谈论一个表,我想你想使用'每个类层次结构'映射策略?
答案 1 :(得分:0)
神秘解决了;我以为我只是映射FierceDragon
,但不,我也将Dragon
映射到表Dragons
。不知道为什么NH在这种情况下做了那个特别的事情,但显然修复是,你知道,不是将单独的类映射到同一个表。或者,如果你这样做,至少给NH一些区分数据库中两者的方法。