2010-01-25 3 views
0

나는 Hibernate에 대해 아직 익숙하지 않으며 상속 한 웹 사이트에 대해 그것을 사용하려고 시도하고있다. 불행히도 db 스키마가 항상 의미가있는 것은 아니라는 것을 의미합니다. 그와NHibernate : Criteria API를 사용하여 join의 일부인 클래스를 제외하는 방법

은, 내가 선택하고 TableB의에게 반환 SQL을 생성

from TableB b where b.id = :id and b.TableAProperty.UserId = :userId 

HQL 문 위의 기준 API를 사용하여 다음 HQL 쿼리를 구축을 위해 노력하고 말했다 만 나는 일이 원하는이다. 그러나 아래에 표시된 Critera API 문을 사용하여 생성 된 SQL 문은 TableB 및 TableA의 필드를 선택합니다.

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateCriteria("TableA") 
    .Add(Expression.Eq("UserId", userId)) 
    .UniqueResult<TableB>() 
    ; 

완벽한 세상에서 db 스키마를 업데이트하여 더 많은 의미를 갖출 수는 있지만 아쉽게도 할 수 없습니다. 이것에 대한 도움은 크게 감사 할 것입니다.

답변

2

귀하의 질문에 TableA 및 TableB와 관련된 클래스가 표시되지 않으므로 클래스가 TableA 및 TableB이고 해당 TableB에 TableA라는 속성이 있다고 가정합니다.

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateAlias("TableA", "a") 
    .Add(Expression.Eq("a.UserId", userId)) 
    .UniqueResult<TableB>(); 
+0

귀하의 가정은 정확합니다. – rmblstrp

관련 문제