2010-05-06 3 views
7

기준에서 하위 쿼리에 대해 읽었지만 올바르게 파악할 수 없습니다. 여기에 나는 하나의 예를 든다. 만약 누군가가 서브 쿼리를 사용하여 그것을 쓸 수 있다면 큰 도움이 될 것이다.nHibernate의 기준에 하위 쿼리 작성

우리가 지금은 관리자이며, 10 년 미만 근무하는 모든 직원을 원하는

Employee{EmployeeId.(int),Name(string),Post(string),No_Of_years_working(int)} 

테이블

이 있다고 할 수 있습니다. 하위 쿼리를 사용하지 않고도 결과를 얻을 수 있지만 하위 쿼리를 사용하여 조건에서 작동하는 방식을 이해하고자합니다.

그렇다면 하위 쿼리를 사용하여 Criteria를 작성하여 해당 직원을 확보하는 방법. 이 도움이

DetachedCriteria dc = DetachedCriteria.For<Employee>() 
.Add (Subqueries.PropertyIn("EmployeeId", 
    DetachedCriteria.For<Employee>() 
     .SetProjection(Projections.Property("EmployeeId")) 
     .Add(Restrictions.Lt("No_Of_years_working", 10)) 
     .Add(Restrictions.Eq("Post", "Manager")) 
); 

희망 : -

답변

0

나는이 질문을 발견했을 때 Bipul의 작업과 비슷한 작업을 수행하려고 했으므로 bernhardrusch의 대답 아이디어를 얻었지만 Projections.projectionList를 추가하지 않으면 하위 쿼리가 작동하지 않는다는 것을 깨달았습니다. 따라서 최종 버전으로 몇 줄의 코드를 작성하기로했습니다.

Session session; //You get the session according with your app logic 

//Let's define first the subquery 
DetachedCriteria sub = DetachedCriteria.forClass(Employee.class); 
sub.add(Restrictions.lt("No_Of_years_working", 10)); 
sub.add(Restrictions.eq("Post", "Manager")); 
sub.setProjection( 
Projections.projectionList().add(     Projections.property("EmployeeId") 
) 
); 

//Now the main query 
Criteria criteria = session.createCriteria(Employee.class); 
criteria.add(Property.forName("EmployeeId").in(sub));