2009-12-16 5 views
0

가능하면 NHibernate - Detached Criteria에 다음 SQl을 쓰고 싶습니다.NHibernate를 사용하는 조인에서 subselect 사용

select * from parent 
INNER JOIN child on parent.id=child.parentid 
INNER JOIN 
    (select ChildID, MAX(ChildDate) MaxChildDate from child group by ChildID) max 
ON child.childid, child.ChildDate=max.MaxChildDate 

이것은 모든 paret에서 최신 아이를 제공합니다.

하위 쿼리를 Critera에 쓸 수는 있지만 ChildID와 MaxDate의 이중 링크를 수행 할 수 없습니다.

답변

1

감사합니다. 조인은 예제처럼 매우 간단하지 않았고 사용 된 테이블이 많았습니다. SQL 세트 기반 설치에서 수행되었지만 필터로 다시 돌아 오는 엄청난 양의 데이터가 있었으면 좋겠습니다. 그것 linq에.

불행히도 속도가 디자인보다 우위에 있어야만 복잡한 결합이 포함 된보기가 만들어져 기본 도메인 객체의 사전 테이블로 사용되었습니다. 그래도 모든 도움을 주셔서 감사합니다.

건배

스투

0

당신이 묻고있는 일을하는 방법을 실제로 알고 있다고 말할 수는 없지만 NHibernate는 쿼리하는 실제 개체를 반환합니다.이 경우 목록/부모 개체 집합을 반환합니다. 이 Parent 객체에는 Child 객체 컬렉션이 첨부됩니다. 이 데이터를 두 번 연결하고 다른 정보를 가져 오는 개념은 NHibernate에서 내가 아는 한 작동하지 않는다.

부모에게 직접 사용할 수있게하려면 Parent.hbm.xml 파일의 "where"특성을 통해 미리 필터링 된 이러한 세부 정보가있는 부모 개체에 다른 변수를 만드는 것이 좋습니다. 이 작업을 원하지 않으면 LINQ 또는 이와 유사한 항목을 사용하여 컬렉션의 각 부모에 대한 최신 Child 개체를 꺼내는 것이 좋습니다.

당신이 당신의 Parent.hbm.xml 파일에서 찾을 것 "여기서"속성의 예는 다음과 같습니다

<set name="LatestChild" table="child" generic="true" inverse="true" where="*your sub-query here*"> 
    <key column="parent_id" /> 
    <one-to-many class="YourNameSpace.Model.Child,Model"/> 
</set> 

이것은 오직 컬렉션의 경우 쿼리와 일치하는 자식 개체를 반환합니다.

here에 대한 문서를 찾을 수 있습니다. 이것은 Hibernate 참조이며 NHibernate가 아니지만 대부분의 영역에서 거의 동일합니다.

행운을 빈다.

0

부모 (ChildDate로 정렬)에 정렬 된 목록 속성을 만들므로, 마지막으로 (linq 확장을 사용하여) 얻을 때 필요한 항목을 얻을 수 있습니다. 복잡한 조인을 작성할 필요가 없습니다.

관련 문제