2009-08-26 13 views
1

XMLの代わりにアノテーションを使用してこのマッピングを構成したいと考えています。このhibernate-mappingを注釈で書き直すにはどうすればいいですか?

ここで(公共消費のために消毒)マッピングの設定は次のとおり

<hibernate-mapping package="com.test.model"> 
    <class name="Parent" table="parent"> 

    <composite-id name="id" class="ParentCompositeKey"> 
     <key-property name="first_id" type="long" column="first_id"/> 
     <key-property name="second_id" type="long" column="second_id"/> 
    </composite-id>  

    <set name="parentChildren" table="parent_child" inverse="true" cascade="all"> 
     <key on-delete="cascade"> 
      <column name="first_id"/> 
      <column name="second_id"/> 
     </key> 
     <one-to-many class="Child" /> 
    </set> 

    </class> 
</hibernate-mapping> 

Parentは、二つLong Sからなる複合主キーを有します。 Childには、親の複合主キーと追加のLongからなる複合主キーがあります。 Parentを削除すると、関連するChildレコードも削除されます。 (これらの子供たちは、明らかに自分自身のために逃げることはできません)

これは一方向の関係です。 Child側では、Parentを見つける必要はありません。

私はJPAアノテーションの初心者です。私はドキュメントを見て、今まで私の問題を解決するために@OneToMany@JoinTable@JoinColumnsのさまざまな組み合わせを試しました。

このquestionは私に希望を抱かせるものではありませんが、XMLで動作するのであればアノテーションで実行できるはずです。

アドバイスありがとうございます。

答えて

2

ここにはHibernate Annotations documentationへのリンクがあり、あなたの大部分をカバーしています。結果のマッピングはの線に沿って何かのようになります。

@Embeddable 
public class ParentCompositeKey implements Serializable { 

    public long getFirstId() { ... } 

    public long getSecondId() { ... } 

    // setters 
} 

@Entity 
public class Parent implements Serializable { 

    @Id 
    public ParentCompositeKey getId() { ... } 

    @OneToMany(cascade=CascadeType.ALL) 
    @JoinColumns ({ 
     @JoinColumn(name="first_id"), 
     @JoinColumn(name="second_id") 
    }) 
    public List getParentChildren() { ... } 

    // setters 
} 

これは、あなたが何も(それはあなたが行うかどうか、あなたの名前付けスキームからのビットは不明です)テーブルに参加している負いません。しかし、あなたが行う場合は、@JoinTable注釈を追加し、@JoinColumnsをその中に移動するだけです。

+0

ありがとうございました。これは本当に助けになりました。 – Kevin

関連する問題