2011-08-03 35 views
0

我有一個名爲HQL查詢,這使得利用對象構造爲未映射的對象(它是僅導入)NHibernate的返回從HQL命名查詢重複行與對象構造

例如

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

發現問題。

當談到繼承類時,我的項目有一些奇怪的映射。

基本上,SomeMappedClass是抽象的,並且有它自己的NHibernate映射,並且有一個派生類SomeDerivedClass(沒有添加任何功能),它也被單獨映射而沒有「extends」屬性。

這導致NHibernate發出兩個sql查詢,併爲同一個表使用不同的別名。

在我的情況下,簡單的快速和骯髒的解決方案是從SomeDerivedClass而不是SomeMappedClass進行查詢,但更合適的解決方案可能是修改映射/對象繼承。