我有一个命名的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)
答案 0 :(得分:0)
发现问题。
我的项目在继承类时有一些奇怪的映射。
基本上,SomeMappedClass是抽象的,并且有自己的NHibernate映射,并且有一个派生类SomeDerivedClass(没有添加任何功能),它们也是在没有“extends”属性的情况下单独映射的。
这导致NHibernate发出两个sql查询,对同一个表使用不同的别名。
在我的例子中,简单快速和脏的解决方案是从SomeDerivedClass而不是SomeMappedClass查询,但更合适的解决方案可能是修改映射/对象继承。