2010-08-24 7 views
3

그래서 나는 NHibernate 충돌 과정에 있고, 좀 아래의 예와 함께 걸림돌을 친다.이 조건을 NHibernate HBM 매핑에 쓰려면 어떻게해야합니까?

가정하자 나는이 다음 .NET 클래스 : 우리가에만 관심이 있다면 당신은이 매핑을 변경 얼마나,

<class name="A" table="A"> 
    <id name="id" type="Int32"> 
     <generator type="identity" /> 
    </id> 
    <property name="type_var" /> 
    <set name="someCollection" table="B"> 
     <key name="fk_aid" /> 
     <composite-element class="B"> 
       <property name="someText" /> 
     </composite-element> 
    </set> 
</class> 

내 문제는 다음과 같습니다

class A { 
    int id; 
    int type_var; 
    List<B> someCollection; 
} 

class B { 
    int id; 
    string someText; 
} 

내가 아마이 좋아하는지도 것 (fk_aid를 통해) A에 속한 B 요소를 가져 오는데 AND와 type_var 값이 같음 (A와 B가 모두 type_var 열을 가졌지 만 명시 적으로 관련이 없다고 가정 해 봅시다).

여기서 where 절과 같은 것을 사용해야 할 것 같습니까?

<set name="someCollection" table="B" where="type_var = type_var"> 

정확히 어떻게하나요?

답변

0

이 경우 하위 선택이 작동한다고 생각합니다 (귀하의 RDMS가 지원한다고 가정). 그래서 뭔가는 다음과 같습니다.

<set name="someCollection" table="B" where="type_var = (SELECT A.type_var FROM A WHERE A.fk_aid = id)"> 

여기서 달성하고자하는 것에 지나치게 명확하지 않습니다. 하지만 쿼리 전용 속성으로 매핑하는 것이 좋습니다. this article에서 논의 된 바와 같이.

+0

나는 그것이 약간 중복 될 것이라는 느낌을 떨쳐 낼 수는 없지만 작동해야하는 것처럼 들린다. 이미 을 통해 자동 FK 링크가 있지만 쿼리 조건에서 다시 수행하고 있습니다. NHb가 이것을 피할 수있는 능력이 있는지 궁금합니다. :) –

+0

@ 리차드; 음,이 경우에 당신 말이 맞아요.하지만 'Where'절이 생성되는 방식 때문에 피할 수 있다고 생각하지 않습니다. 현재 테이블에서 필터링하는 것으로 가정합니다. – DanP

관련 문제