2012-03-07 32 views
3

JPAを使用してテーブルPersonを作成したいのですが、PersonがPersonクラスのフィールドを持っていて、ソウルメイトを表す必要があります。 人はソウルメイト(別の人)を持つことができますが、必須ではありません。JPAとの自己結合関係

私のマッピングのやり方は本当に混乱しています。私はキーワードがこれを私にここで助けることができるかどうかわからない。

私は最良のアプローチが何であるか理解したいと思います。 これは私がやったことですが、私は正しくないと思います。 誰かが私にそれを訂正するのを手伝ってもいいですか?注釈に配備記述子

<persistence-unit-metadata> 
    <entity-mappings> 
      <entityclass = “packgagename.Person”> 
      <attributes> 
       <id name="identificator"/> 
       <column name="name"/> 
       <one-to-one name="soulmate" targetEntity="packgagename.Person" mappedby="this"/>     
      </attributes> 
    </entityclass> 
    </persistence-unit-metadata> 
+0

人が複数のためのソウルメイトことはできますか? – perissf

+0

@perissfいいえありません – sfrj

+0

私はどのようにメモリからこのマッピングを作成するのか分かりませんが、あなたのDB設定を持っている場合は、DBをリバースエンジニアリングし、jpaエンティティを生成するために休止状態のツールを試してみてください:http:// www .hibernate.org/subprojects/tools.html – Vladimir

答えて

6

を使用して

//DEFINE OneToOne Relationships (SELF JOIN-No mandatory) 
    @Entity class Person { 
     @Id 
     private long identificator; 
     private String name; 
     @OneToOne(targetEntity=Person.class mappedby="this") 
     private Person soulmate; 
    } 

バージョンを使用して

バージョンは、私は、これはトリックを行うべきだと思う:

@OneToOne(optional = true) 
@JoinColumn(name = "SoulmateId") 
private Person soulmate;