2012-03-29 4 views
2

У меня есть запрос, который содержит в выбранном пункте:NHibernate возвращаются неправильные результаты SQL запроса

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

И в ЕКОМ:

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

Допустим в БД у меня есть эти строки : ID НАЗВАНИЕ ORIGINAL_DOC

1 Title1 
    2 Title2 1 

в первом ряду, NHibernate будет возвращать 1, Title1, п ull, 1, Title1 вместо 1, Title1, null, null, null.

Для второй строки он вернет 2, Title2, 1, 2, Title2 вместо 2, Title2, 1, 1, Title1.

Обратите внимание, что третий и четвертый столбцы не должны содержать разные значения, так как условие соединения является одинаковым. Кажется, что происходит то, что я получаю ту же строку d1, что и d2, вместо строки, определяемой условием.

Теперь странная часть: Если я вернусь .ShowSql() и скопирую запрос в Oracle Toad, он действительно вернет правильные результаты!

Я получаю результирующий набор в NHibernate с помощью уаг данных = session.CreateSQLQuery (SelectQuery) .list()

Кто-нибудь получил какие-либо идеи?

ответ

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

+1

Это тоже мое мнение. Вы можете добавить комментарий в jira, если хотите. Возможно, было бы лучше добавить новую проблему типа «улучшение функции». Просто будьте вежливы в jira, некоторые люди там чувствительны ... –

+1

+1 за сообщение об ошибке, что привело меня к выводу, что эта ошибка «не ошибка» для nhibernate и что я должен переименовать имена столбцов с одинаковой орфографией в мой запрос. –

Смежные вопросы