2011-11-04 3 views
0

NHibernate 쿼리에 다음과 같은 문제가 있습니다.다중 열 Nhibernate 조인 테이블

하나의 테이블

LearnerDocuments : 
    LearnerNumber 
    CandidateNumber 
    .... 

다른 테이블

LearnerRegistration : 
    LearnerId 
    LearnerNumber 
    .... 

LearnerDocuments과와 LearnerRegistration의 마지막

Learner : 
    LearnerId 
    LearnerName 
    .... 

의 관계는 존재하지 않습니다.

LearnerDocuments을 모두 가진 LearnerRegistration을 가져 오는 쿼리를 작성하려면 어떻게해야합니까?

+0

사용중인 매핑 기술을 알려주시겠습니까? 자동 매핑이나 hbm 또는 유창처럼. – Thanigainathan

+0

테이블을 '결합'하기 위해 관계/매핑을 정의해야합니다. NH는 임시 결합을 수행 할 수 없습니다. 그러나'exists' 절을 사용할 수 있습니다. 어느 쪽을 원하니? – dotjoe

+0

Projections.Exist를 사용하여 문제가 해결되었습니다. – JeneaCr

답변

0
criteria.CreateCriteria(typeof(LearnerRegistration), "av") 
        ...... 

        .Add(Restrictions.IsNotNull("RegistrationNumber"))      
        .Add(Subqueries.PropertyIn("l.Id", detachedCriteria)) 

       ; 


      var candidate = DetachedCriteria.For<LearnerDocuments>("sd") 
         .SetProjection(Projections.ProjectionList() 
         .Add(Projections.Property("sd.CandidateNumber")) 
         .Add(Projections.Property("sd.RegistrationNumber"))) 
         .Add(Restrictions.EqProperty("sd.CandidateNumber", "l.LearnerNumber") 
         && Restrictions.EqProperty("sd.RegistrationNumber", "lr.RegistrationNumber") 
         ); 

      var proj = Projections.Conditional(Subqueries.Exists(candidate),Projections.Constant(true),Projections.Constant(false));