NHibernate返回错误的SQL查询结果

时间:2012-03-29 06:32:13

标签: oracle nhibernate

我有一个包含在select子句中的查询:

    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,Title1,null,1,Title1而不是1,Title1,null,null,null。

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

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

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

我通过使用var data = session.CreateSQLQuery(selectQuery)获取NHibernate中的结果集.List()

有人有任何想法吗?

1 个答案:

答案 0 :(得分: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