0

私は次のドメインオブジェクトを持っています

Loan {
     int id;
     Date attribute1;
}

LoanExtension {
     Date attribute2;
}

データベースのLoanExtensionの属性のみを変更したい場合があるため、このようなオブジェクトを保持したいと思います(つまり、ローンオブジェクトのattribute1はオブジェクトでnullになり、これをデータベースに設定したくないためです。 )。

xmlでHibernateマッピングを使用してこれをどのように可能にしますか?私は次のことをしました

<class name="org.domain.borrowerReview.Loan" table="loan_profiles" >
    <cache usage="read-only"/>
    <id name="loanId" column="id">
        <generator class="native"/>
    </id>
    <version name="attribute1" column="date_1/>
    <subclass name="org.domain.borrowerReview.LoanExtension" extends="org.rangde.domain.borrowerReview.LoanProfilesUpdate">
        <property name="attribute2" column="date_2" />
    </subclass>
</class>

この例外が発生します:'single-table-per-hierarchy'が使用され、クラスにサブクラスがある場合、識別子が必要です

4

1 に答える 1

0

短い答え

識別子列を追加し、スニペットを次のように変更する必要があります。

<class name="org.domain.borrowerReview.Loan" table="loan_profiles" > 
    <cache usage="read-only"/> 
    <id name="loanId" column="id"> 
        <generator class="native"/> 
    </id> 
    <version name="attribute1" column="date_1/> 
    <discriminator column="loan_profiles_type" type="string"/>
    <subclass name="org.domain.borrowerReview.LoanExtension" extends="org.rangde.domain.borrowerReview.LoanProfilesUpdate"> 
        <property name="attribute2" column="date_2" /> 
    </subclass> 
</class> 

長い答え

まず、JPAの継承は、通常の継承と完全に並行しているわけではないことを忘れないでください。

クラスの設計が基礎となるスキーマにどのように影響するかを評価する必要があります。

テーブル構造をどのようにしたいかについては言及していません。

Hibernateは継承のための3つのメカニズムを提供します。

  • クラス階層ごとのテーブル
  • サブクラスごとのテーブル
  • 具体的なクラスごとのテーブル

ここで詳細を参照してください

xmlスニペットは、クラス階層ごとにテーブルを使用していることを示しています。

さて、サブクラスがある場合、それが1つのサブクラスだけである場合はほとんど使用されません(許可されていますが)。また、「クラス階層ごとのテーブル」の下に、すべてのサブクラスが同じテーブルに配置されます。

特定のレコードが属するサブクラスを区別するために、休止状態は識別子列に依存します。

同じことを定義する必要があります。

次のドキュメントドキュメントを参照してください。

于 2012-04-20T22:10:25.743 に答える