2010-01-16 3 views
2

내 클래스는 다음과 같이 (난 단지 관련 속성을 포함)을 찾습니다NHibernate : 자식 컬렉션의 서브셋으로 여러 엔티티를 얻는가?

public class Order 
{ 
    public virtual Customer Customer { get; set; } 
    public virtual IEnumerable<OrderLine> OrderLines { get; set; } 
} 

public class OrderLine 
{ 
    public virtual string Product { get; set; } // Simplified 
} 

지금은 내가 원하는 것은 특정 고객에 대한 모든 주문을 선택하는 분리 기준을 만드는 것입니다, 동시에 검색하여에 각 주문에 대해 처음 10 개 주문 만 첫 번째 부분은 간단합니다 :

Customer someCustomerObject = ...; 
var criteria = DetachedCriteria.For<Order>().Add(Restrictions.Eq("Customer", someCustomerObject); 

하지만 어떻게 NHibernate에 열심히 위의 기준에 의해 검색된 각 주문에 대한 첫 번째 10 orderlines를 검색 할 내가 지시 하는가?

session.CreateFilter(lazyCollection, "").SetFirstResult(0).SetMaxResults(10).List(); 

을하지만이 CreateFilter 방법 Order.OrderLines을 줄 때, 그것은 이후에 다음를 검색을 먼저 orderlines를 검색하고 :

나는 다음의 예에 따라 필터를 사용하여 시도했다 (NHibernate에 문서에서 가져온) 10 개의 첫 번째 주문은 내가 원하는 것이 아닙니다. 나는 또한 이것을 NHibernateUtil.Initialize에 대한 전화와 결합하여 사용하지 않으려 고 노력했다.

이 문제에 대한 분리 된 기준은 어떻게 만듭니 까? 아니면 전체적으로 가능하지 않은 경우 전체 컬렉션을 가져 오지 않고 각 주문에 대해 10 개의 첫 번째 결과 만 검색하는 방법은 무엇입니까?

+0

당신이 대신 "기준"에는 setMaxResults에 전화를하면 어떻게됩니까? –

답변

0

Order 클래스의 NHibernate 매핑 파일에서 batch-size 속성을 10으로 설정할 수 있습니다. 이렇게하면 컬렉션의 처음 10 개 요소를 열심히로드하고 나머지 요소를 지연로드합니다.

<set name="OrderLines" table="OrderToOrderLine" batch-size="10"> 
    <key column="OrderId"/> 
    <one-to-many class="OrderLine"/> 
</set> 

더 많은 정보를 읽어 : 나는 다음과 같이 수집을지도 할 NHibernate Mapping - Collections

관련 문제