NHibernate使用对象构造函数从hql命名查询返回重复行

时间:2011-08-03 01:02:05

标签: nhibernate hql

我有一个命名的hql查询,它使用对象构造函数来处理未映射的对象(只导入它)

e.g。

select distinct new NotMappedResultClass(ah.SomeProp1, ah.SomeProp2)
from SomeMappedClass
where ...
order by ah.SomeProp1

奇怪的是,当我在NHibernate中调用IQuery.List()时,我最终得到的NHibernate行的数量是NHibernate运行的行的两倍(使用SqlProfiler跟踪)。

(如果重要,“where”子句确实涉及一些子查询)。

为什么NHibernate会复制从数据库返回的行?

(我正在使用NHibernate 1.2.1.4000)

1 个答案:

答案 0 :(得分:0)

发现问题。

我的项目在继承类时有一些奇怪的映射。

基本上,SomeMappedClass是抽象的,并且有自己的NHibernate映射,并且有一个派生类SomeDerivedClass(没有添加任何功能),它们也是在没有“extends”属性的情况下单独映射的。

这导致NHibernate发出两个sql查询,对同一个表使用不同的别名。

在我的例子中,简单快速和脏的解决方案是从SomeDerivedClass而不是SomeMappedClass查询,但更合适的解决方案可能是修改映射/对象继承。