2010-02-12 3 views
3

나는이 nhibernate로 액세스하는 이러한 레거시 테이블을 가지고 있지만 기본 엔티티 액세스는 괜찮지 만 실제로 조인 작업이 필요할 것입니다.nhibernate 매핑, 기본 및 외래 키없이 연결

이상적으로는 조인을 정의하는 데 기본 키와 외래 키가 있지만 이러한 테이블은 레거시 테이블이므로 테이블의 인덱스 인 인덱스는 성능상의 이유로 인덱스에 사용되므로 변경할 수 없습니다.


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="JobHeader " dynamic-update="true" table="JOB_HEADER"> 
    <composite-id> 
     <key-property name="Company" column="JBH_COMPANY" type="String(6)" /> 
     <key-property name="ContractRef" column="JBH_CONTRACT_REF" type="String(10)" /> 
     <key-property name="JobRef" column="JBH_JOB_REF" type="String(10)" /> 
     <key-property name="Status" column="JBH_STATUS" type="String(10)" /> 
    </composite-id> 
    <property name="RowId" column="TK_ROWID" type="Int32" not-null="true" /> 
    <property name="PropRef" column="JBH_PROP_REF" type="String(20)" not-null="false" /> 
    </class> 
</hibernate-mapping> 

및 속성 매핑은 다음과 같습니다 :


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="Property" dynamic-update="true" table="PROPERTY"> 
    <composite-id> 
     <key-property name="Company" column="PRP_COMPANY" type="String(6)" /> 
     <key-property name="Reference" column="PRP_REFERENCE" type="String(20)" /> 
    </composite-id> 
    <property name="RowId" column="TK_ROWID" type="Int32" not-null="true" /> 
    <property name="Name" column="PRP_NAME" type="String(40)" not-null="false" /> 
    </class> 
</hibernate-mapping> 

Jobheader 그것에서

은 어쨌든 난 JobHeader 테이블과 JobHeader 맵핑이 순간에이 같이 보입니다

속성 테이블이 속성 "참조"를 보유하기 위해 "PropRef"를 사용합니다.

나는 아마 다음과 같이 보일 것입니다 그래서 JobHeaderJoinedProperty 라고 할 것입니다 새 매핑 파일을 만들 싶습니다 내 JobHeaderJoinedProperty 엔티티는 다음과 속성 개체에 액세스 할 수있을 것이라고 기대하고 그리고


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="JobHeaderJoinProperty" dynamic-update="true" table="JOB_HEADER"> 
    <composite-id> 
     <key-property name="Company" column="JBH_COMPANY" type="String(6)" /> 
     <key-property name="ContractRef" column="JBH_CONTRACT_REF" type="String(10)" /> 
     <key-property name="JobRef" column="JBH_JOB_REF" type="String(10)" /> 
     <key-property name="Status" column="JBH_STATUS" type="String(10)" /> 
    </composite-id> 
    <property name="RowId" column="TK_ROWID" type="Int32" not-null="true" /> 
    <property name="PropRef" column="JBH_PROP_REF" type="String(20)" not-null="false" /> </class> 
    <bag name="Property" fetch="join" > 
     <key column="Reference" property-ref="PropRef" /> 
     <one-to-one class="Property"/> 
    </bag> 
    </class> 
</hibernate-mapping> 

을 이것 :


public virtual Property Property 
     { 
      get 
      { 
      return this.property; 
      } 
      set 
      { 
      this.property = value; 
      } 
     } 

nhibernate를 통해 두 개의 레거시 테이블에 가입하는 것은 너무 까다로워하지 않아야합니까?! 정말 단지 내부를 복제 할

는 SQL이 같은 곳이 될 것입니다 가입 :


Select * from job_header inner join property on property.reference = job_header.propref 

답변

0

당신이 후 모두 일대일 매핑이 아닌가?

<one-to-one 
     name="PropertyName"        (1) 
     class="Property"         (2) 
     cascade="all|none|save-update|delete"    (3) 
     constrained="true|false"       (4) 
     fetch="join|select"        (5) 
     property-ref="PropertyNameFromAssociatedClass"  (6) 
     access="field|property|nosetter|ClassName"   (7) 
/> 

따라서 귀하의 경우는 http://www.nhforge.org/doc/nh/en/#mapping-declaration-onetoone

소스

<one-to-one 
     name="Property"        
     class="ClassName"         
     property-ref="PropRef" 
/>