自我加入与JPA的关系

sfr*_*frj 3 java xml jpa java-ee java-ee-6

我想创建一个使用JPA的表Person,要求Person应该有一个Person类型的字段来代表一个灵魂伴侣.人可以有一个灵魂伴侣(另一个人),但不是强制性的.

我对如何进行映射感到非常困惑.我不确定这个关键字是否可以帮助我.

我想了解什么是最好的方法.这就是我所做的,但我认为不正确.有人可以帮我纠正它,并解释我这种关系应该如何运作?

使用注释的版本

   //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;
    }
Run Code Online (Sandbox Code Playgroud)

版本使用部署描述符

<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>
Run Code Online (Sandbox Code Playgroud)

K.C*_*.C. 6

我认为这应该可以解决问题:

@OneToOne(optional = true)
@JoinColumn(name = "SoulmateId")
private Person soulmate;
Run Code Online (Sandbox Code Playgroud)