2012-03-29 101 views
2

我有一个包含在SELECT子句的查询:NHibernate的返回SQL查询错误的结果

d1.id, 
    d1.title, 
    d1.original_doc, 
    d2.id, 
    d2.title 

而且在FROM子句:

left outer join documents d2 on d1.original_doc = d2.id 

比方说,在DB我有这些行: ID TITLE ORIGINAL_DOC

1 Title1 
    2 Title2 1 

对于第一行,NHibernate的返回1,标题1,正ull,1,Title1,而不是1,Title1,null,null,null。

对于第二行,它将返回2,Title2,1,2,Title2而不是2,Title2,1,1,Title1。

请注意,第三列和第四列不应包含不同的值,因为连接的条件是相同的。似乎正在发生的事情是,我得到与d2相同的d1行,而不是由条件定义的行。

现在奇怪的部分:如果我打开.ShowSql()并将查询复制粘贴到Oracle Toad中,它实际上会返回正确的结果!

我正在使用VAR数据=执行Session.createSQLQuery(selectQuery)的.List()

任何人有任何想法NHibernate的设置结果?

回答

4

我举报exactly this as a bug,但这不是一个错误。 NH使用列名称管理内部结果。如果它们具有相同的名称,则选择第一个。您需要在select子句中为其指定唯一的名称:

SELECT 
    d1.id as id1, 
    d1.title as title1, 
    d1.original_doc as original_doc1, 
    d2.id as id2, 
    d2.title as title2 
+0

谢谢,这样做!这似乎从NHibernate很弱,从面向完全相同的查询时返回不同的结果。我甚至不会介意一个错误,但悄悄地返回错误的结果是非常糟糕的。而且这不是一个必要的限制。 :/当你考虑它时,这显然是一个错误。 – svinja 2012-03-29 06:50:42

+1

这也是我的看法。如果你愿意,你可以在jira中留言。增加一个类型为“功能增强”的新问题可能会更好。只要在杰拉有礼貌,有些人在那里很敏感... – 2012-03-29 09:46:11

+1

+1报告错误ID导致我得出结论,这个错误是“不是一个错误”的nhibernate,我应该重新命名列名相同的拼写我的查询。 – 2013-02-28 09:06:43