우리는 세 개의 하위 클래스/테이블이있는 Customer라는 테이블을 가지고 있습니다. Cust1, Cust2 및 Cust3는 조인 된 하위 클래스를 사용하여 hbm에 의해 링크됩니다.Nhibernate - SQLQuery 생성 - IndexOutOfRangeException
모든 4 개의 테이블에는 CustomerId가 기본 키로 있습니다. 고객 테이블의 레코드에는 Cust1 또는 Cust 2 또는 Cust3 테이블에 하나의 레코드가 있습니다.
표준 Nhibernate List()를 사용하여 목록을 가져 오는 것은 클래스와 하위 클래스를 올바르게 페치합니다.
그러나 쿼리를 최적화하려면 CreateSQlQuery 메서드를 사용해야했습니다.
는 goolging에, 우리는 사건과 alais 변화 사이의 CUstId 열을 차별화 할 필요가 같은
var sqlQuery = Session.CreateSqlQuery(
select C.*,
case if C1.CustId is not null then 1
else if C2.CustId is not null then 2
....
from Customer C
left join Cust1 C1 on C1.CustId = C1.CustId
left join Cust2 C2 on C2.CustId
where C.CustID in (x,y,z,blah,blah).).
sqlQuery.AdddEntity("C",typeof(Customer));
sqlQuery.List();
로 선택 쿼리가 올바른 방법이 클래스를 가져와 하위 클래스임을 발견 쿼리를 실행 켜기 NHibernate에가 내부적으로 다른 clazz에에 오류가 발생 될 쿼리를 genereates 4 개 테이블 ..
, 우리는
로 NHibernate에 예외를 얻을 0"IndexOutOfRangeException - 기간"
Cust1 (하위 클래스) 테이블에는 Duration이라는 열이 있습니다. 내가 열 이름이 문제가 있는지 확인하는 Duration_BE에 테이블 열 이름을 변경, 다음은
가 오류가 발생했습니다 "IndexOutOfRangeException이 - 시간이-BE"
작업이 모드에 대한 참조 .. http://www.methodicmadness.com/2009/01/nhibernate-what-is-heck-clazz.html
어느 누구도 나를 도와 줄 수 있습니까?
이 질문은 매우 구체적이며 NHibernate 사용자 그룹에 대신 게시해야합니다. http://groups.google.com/group/nhusers – zvolkov