2011-08-15 9 views
2

これは私がやりたいことですが、同じプライマリキーを持つ別のテーブルにオブジェクトをマップします。以下の例では、基本的に、ANOTHERテーブルの複合キーを持つ複合キーを持つオブジェクトが1つありますが、適切なオブジェクトキーを作成するために両方を含める方法がわかりません。私は間違っている行を強調表示し、キーのプロパティの1つだけを含んでいます。 <key-many-to-oneを1列のみBUSINESS_RULEを宣言するため、複合外部キーbusinessRuleコンポジットキーの中にコンポジットキーをマップするhibernate xml

+0

との間の任意のマスタ/詳細関係が存在します二 ? –

+0

いいえ、すべての目的と目的のために、プライマリキー以外のデータを除いて同じテーブルにすることができます。 – Organiccat

答えて

5
<class name="BusinessRuleObject" table="BUSINESS_RULE_OBJECTS" schema="DB"> 
    <composite-id name="businessRuleObjectId" class="BusinessRuleObjectId"> 
     <key-property name="sameIdCode" column="ID_CD" /> 
     **<key-many-to-one name="businessRule" class="BusinessRule" column="BUSINESS_RULE" />** 
    </composite-id> 
    <!-- ... STUFF GOES HERE --> 
    </class> 

    <class name="BusinessRule" table="BUSINESS_RULE_STRINGS" schema="DB"> 
    <composite-id name="businessRule2ID" class="BusinessRule2ID"> 
     <key-property name="sameIdCode" column="ID_CD" /> 
     <key-property name="businessRuleCode" column="BUSINESS_RULE" /> 
    </composite-id> 
    <!-- TOTALLY DIFFERENT STUFF GOES HERE --> 
    </class> 

唯一の特性は、含まれています。あなたの例では、BUSINESS_RULEID_CDを参照している複合キーの2つの列を宣言する必要があります。要素<key-many-to-oneID_CD列を追加することにより、要素の列を削除または名前変更する必要があります。<key-property name="sameIdCode" column="ID_CD" />要素。

関連<key-many-to-onebusinessRuleの目的は、このようにマッピングされなければならない:

Hibernateリファレンスdocumenation
5.1.7. composite-id
Components as composite identifiers

関連する問題