2009-07-05 2 views
1

현재 내가 다음과 같은 클래스가 : 속성 ID, 제목 및 본문 클래스 질문에NHibernate에 상속 문제

클래스 기사 :

그런 다음 추가 PostedBy 속성을 조 테이블 위과 제 불렀다을 속성 및 외래 키 articleID 및 PostedBy라는 ID가있는 질문 테이블이 있습니다. 둘 다 다른 스키마에 있습니다.

이 매핑을 통해이 관계를 나타내는 방법을 알고 싶습니다. 두 클래스가 서로 다른 어셈블리에 있고 기사 클래스/매핑 및 어셈블리에 질문 로직을 넣는 것을 매우 꺼려합니다.

답변

2

NHibernate는 세 가지 기본적인 상속 전략을 지원합니다. 당신이 당신의 기사 클래스의 테이블을 가지고 당신이 table per subclass 방도를 찾고있는 것처럼

  • 서브 클래스 당 테이블
  • 테이블 구체적인 클래스 당 클래스 계층 당

    1. 표는

    소리가 난다 그리고 Question 서브 클래스의 추가 속성에 대한 또 다른 테이블. 매핑은 다음과 같이 보일 수 있습니다.

    <class name="Article" table="Article"> 
        <id name="Id" type="Int64" column="ArticleId"> 
         <generator class="native"/> 
        </id> 
        <property name="Title" column="Title"/> 
        <property name="Body" column="Body"/> 
        ... 
        <joined-subclass name="Question" table="Question"> 
         <key column="ArticleId"/> 
         <property name="PostedBy" column="PostedBy"/> 
         ... 
        </joined-subclass> 
    </class> 
    

    그러나 매핑이 완전히 분리되어 있기를 바라지 않습니다. 당신은 완전히 별개의 매핑을 가질 수 있지만 이것은 Question가 질문 대신에 보통의 Article으로 적재되도록 허용하는 것과 같은 몇 가지 부작용을 가질 수 있습니다. 별도의 매핑을 사용하면 Article 클래스가 예상대로 곧게 전달됩니다. Question 클래스에는 Article 테이블에 저장된 속성에 액세스하기위한 조인이 포함됩니다.

    <class name="Article" table="Article"> 
        <id name="Id" type="Int64" column="ArticleId"> 
         <generator class="native"/> 
        </id> 
        <property name="Title" column="Title"/> 
        <property name="Body" column="Body"/> 
        ... 
    </class> 
    
    <class name="Question" table="Question"> 
        <id name="Id" type="Int64" column="QuestionId"> 
         <generator class="native"/> 
        </id> 
        <property name="PostedBy" column="PostedBy"/> 
        ... 
        <join table="Article"> 
         <key column="ArticleId"/> 
         <property name="Title" column="Title"/> 
         <property name="Body" column="Body"/> 
        </join> 
    </class>