我有一个包含在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()
有人有任何想法吗?
答案 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