2012-03-29 2 views
2

나는 select 절에 포함 된 쿼리가 있습니다는 자 NHibernate는 SQL 쿼리의 잘못된 결과를 반환

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

가의가 DB에 내가이 행이 있다고 가정 해 봅시다 :

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

과에서를 절에서 : 첫 번째 행에 대해 ID를 TITLE의 ORIGINAL_DOC

1 Title1 
    2 Title2 1 

, NHibernate에 돌아올 것이다 1 TITLE1, N ull, 1, 1 대신 Title1, Title1, null, null, null.

두 번째 행의 경우 2, Title2, 1, 1, Title1 대신 2, Title2, 1, 2, Title2를 반환합니다.

조인의 조건이 같기 때문에 세 번째와 네 번째 열에 다른 값이 없어야합니다. 무슨 일이 일어나고있는 것 같아요 조건에 의해 정의 된 행 대신에 동일한 d1 행이 d2로 조인됩니다.

이상한 부분 : .ShowSql()을 on으로 설정하고 쿼리를 Oracle Toad에 복사하여 붙여 넣으면 실제로 올바른 결과가 반환됩니다.

내가 어떤 아이디어를 가지고 = 그것은 Session.createSQLQuery (selectQuery) .List()

누구나 VAR 데이터를 사용하여 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 꽤 약한 것, 정확히 동일한 쿼리를 직면 할 때 DB 반환 할 다른 결과를 반환합니다. 나는 실수도하지 않겠지 만, 은밀하게 잘못된 결과를 돌려주는 것은 정말 나쁘다. 그리고 그것은 전혀 필요한 제한이 아닙니다. :/그것에 대해 생각할 때 이것은 분명히 버그입니다. – svinja

+1

이것은 제 의견입니다. 원하는 경우 jira에 몇 가지 주석을 달 수 있습니다. "기능 향상"유형의 새로운 문제를 추가하는 것이 좋습니다. 그냥 jira에 정중하게, 어떤 사람들은 거기에 민감합니다 ... –

+1

+1이 버그는 nhibernate에 대해 "버그가 아니며"이 버그가 결론을 이끌어내는 버그 ID를보고 해 주었고 같은 철자로 열 이름의 이름을 바꿔야합니다. 내 질문. –

관련 문제