2013-07-30 1 views

답변

2

<subclass> 접근 방식을 사용하려는 경우 then you'll need a discriminator입니다. 이는 hibernate allows mixing subclass strategies with that tag이기 때문에 발생합니다. 따라서 하나의 테이블에서 여러 유형의 엔티티를 가질 수 있으며 그 중 일부는 조인 조작을 수행하는 데 필요하며 다른 엔티티는 해당 기본 테이블에 저장된 모든 값을가집니다. 여기 조인을 필요로하는 CreditCardPayment하고 있습니다 지불의 다른 유형이 간단 : 당신은 그러나이 가입하고 얻을 할 것입니다 최대 절전 모드 당신이 무슨 일을하는지에 해당 <joined-subclass>을 지정할 수 있습니다

<class name="Payment" table="PAYMENT"> 
    <id name="id" type="long" column="PAYMENT_ID"> 
     <generator class="native"/> 
    </id> 
    <discriminator column="PAYMENT_TYPE" type="string"/> 
    <property name="amount" column="AMOUNT"/> 
    ... 
    <subclass name="CreditCardPayment" discriminator-value="CREDIT"> 
     <join table="CREDIT_PAYMENT"> 
      <property name="creditCardType" column="CCTYPE"/> 
      ... 
     </join> 
    </subclass> 
    <subclass name="CashPayment" discriminator-value="CASH"> 
     ... 
    </subclass> 
    <subclass name="ChequePayment" discriminator-value="CHEQUE"> 
     ... 
    </subclass> 
</class> 

discriminator가없는 각 클래스의 요소. <subclass><joined-subclass> 요소를 같은 클래스에 혼합 할 수 없습니다. 여기

당신이 판별을 필요로하지 않는 테이블 당 서브 클래스 구현을 가지고, 그것은 구체적인 클래스 구현 당 하나의 테이블을 사용하도록 강제,하지만 당신은뿐만 아니라 Payment 클래스의 부모 개체를 관리 할 수 ​​있습니다.

<class name="Payment" table="PAYMENT"> 
    <id name="id" type="long" column="PAYMENT_ID"> 
     <generator class="native"/> 
    </id> 
    <property name="amount" column="AMOUNT"/> 
    ... 
    <joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT"> 
     <key column="PAYMENT_ID"/> 
     <property name="creditCardType" column="CCTYPE"/> 
     ... 
    </joined-subclass> 
    <joined-subclass name="CashPayment" table="CASH_PAYMENT"> 
     <key column="PAYMENT_ID"/> 
     ... 
    </joined-subclass> 
    <joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT"> 
     <key column="PAYMENT_ID"/> 
     ... 
    </joined-subclass> 
</class> 
+0

천만 @neila있어 ;-) –

+0

자전거 타는 사람, 또 다른 질문 : 내가 태그에 정의 된 슈퍼 클래스의 추가 코드가 <메타 속성을 = "클래스 코드">, 나도 같은 얻을 하위 클래스의 코드! 어떻게 슈퍼 전용 일 수 있습니까? – junior

+0

'meta' 태그를 서브 클래스에 지정할 수 있습니다. 그냥 –