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
Criterias에서도 이와 동일한 작업을 수행 할 수 있습니까? –
아름다운. 이 JPA 왼쪽 조인 제한 쿼리가 더 잘 알려지기를 바랍니다. 나는 많은 시간을 낭비했다. –