2010-12-17 4 views
7

EAV 시스템에서는 다음과 같은 매핑이 있습니다.NHibernate HQL : "with"절이있는 왼쪽 외부 조인이 작동하지 않습니다.

<class name="Record"> 
    <map name="Values" table="RecordFieldValue"> 
     <key column="RecordFK"> 
     <index column="FieldFK"> 
     <element column="Value"> 
    </map> 
</class> 

특정 레코드에 대해 각 레코드의 값에 따라 정렬하려면 일부 레코드를 선택하고 싶습니다. 그러나 모든 레코드가 실제로 해당 필드의 값을 갖지는 않습니다. 이 경우에도 레코드를 가져 와서 Null 값으로 정렬해야합니다.

원하는 SQL은 다음과 같을 것입니다 :

select rec.*, val.Value 
from Record rec 
left outer join RecordFieldValue val 
on val.RecordFK = rec.PK and val.FieldFK = :field 
order by val.Value 

많은 파기 후에 HQL에서 왼쪽 조인의 "on"절을 수정하는 올바른 방법은 "with" 키워드 (https://nhibernate.jira.com/browse/NH-514 참조). 그래서 나는이 HQL을 시도했다.

from Record rec 
left join rec.Values vals with index(vals) = :field 
order by vals 

불행히도 이것은 다음과 같은 오류를 만든다. with-clause 표현식은 with 절이 with-clause 엘리먼트를 참조하지 않았다. 그래서 대신 시도 :

from Record rec 
left join rec.Values vals with index(rec.Values) = :field 
order by vals 

하지만 새로운 오류가 발생했습니다 : 절만 참조 테이블에서 열을 참조 할 수 있습니다.

이 작품을 얻는 방법에 대한 아이디어가 있으십니까? 감사.

- Brian

답변

9

이 작동합니다.

+0

Criterias에서도 이와 동일한 작업을 수행 할 수 있습니까? –

+0

아름다운. 이 JPA 왼쪽 조인 제한 쿼리가 더 잘 알려지기를 바랍니다. 나는 많은 시간을 낭비했다. –

관련 문제