2009-10-05 5 views
0

기준을 사용하여 PARENT 유형의 모든 객체 목록을 얻으려면 Fluent NHibernate에서 방법을 찾고 있습니다. 나는 아버지 개체와 파생 된 자식이 있습니다. 아버지는 하위 목록을 포함합니다. ,기준을 사용하여 기본 유형을 얻으십시오

ICriteria crit = session.CreateCriteria(typeof(Parent)) 
IList<Parent> myRes = crit.List<Parnet>() 

NH은 "권리"그게 내가 부탁 한 것입니다/C를 B의 부모 요소와 파생 어린이 요소 모두의 목록을 다시 반환 :

문제는 내가 사용하는 경우이다 그러나 그것은 내가 필요한 것이 아닙니다. (어린이 요소는 아버지 개체 내부에만 있어야하지만 부모 개체이기도합니다.이 메서드에서 파생 된 요소이므로 ...이 메서드를 사용하면 NH도이 메서드를 사용할 수 있습니다.)

어떻게 얻을 수 있습니까? 파생 된 자녀가없는 모든 "아버지"요소 목록?

이 내가 그런 일이 필요한 것처럼 (@Stefan Steinegger의가)

session 
    .CreateQuery("from Parent where Parent.class == :class") 
    .AddType(typeof(Parent)); 

그것은 보이는 첫 번째 대답에서 -하지만 그것은 유창함 자 NHibernate에서 작동하지 않습니다.

감사합니다, 다니

답변

0

문제는 실제로 : 당신은 어떻게 Parent 루트 부모인지 확인합니까?

  • 당신은 당신의 모델을 유지하고 정의 : 루트가 상속되지 않고 다른 부모에 포함되지 않은 부모 다양한 방법이있다.

는 "상속되지 않는다"부분 결정하기 쉬운, 그러나 실제로 가난한 정의입니다 수 있습니다. 상속을 사용할 때 특정 유형으로 얻는 객체가 실제로 상속되는지 여부는 상관하지 않아야합니다. 이것이 상속의 특성입니다.

"부분은 다른 부모에 포함되어 있지 않습니다."은 효율적인 방법으로 찾기가 어렵습니다.

  • 개체 부모에 대한 참조를 설정합니다. 루트는 Parent이며 부모는 null을 참조합니다.

  • 루트를 공통 기본 클래스에서 파생시킵니다. 아이는 더 이상 루트가 아니며, 루트는 Root입니다.

마지막 옵션을 선택하는 것이 좋습니다.


BTW : 정확한 유형을 필터링 할 수 있지만 HQL 만 사용하면됩니다.

session 
    .CreateQuery("from Parent where Parent.class == :class") 
    .AddType(typeof(Parent)); 
+0

답변 해 주셔서 감사합니다. 사실 - 부모 개체는 자식 속성이기 때문에 "ParentSeqID"속성이 없습니다. (또는 ParentSeqId에 매핑되는 부모 속성) 기준에 어떻게 추가합니까? "재산이 없다"는 옵션이 있습니까? – Dani

+0

나는 그럴 수 없다고 생각한다.HQL을 사용하는 타입에 대해서만 필터링 할 수 있습니다. 다른 섹션을 제 답변에 추가했습니다. –

+0

The Session.CreateQuery (""). AddType이 컴파일되지 않습니다. (거기에 AddType이 없습니다) – Dani

관련 문제