2012-03-07 4 views
3

Я хочу создать таблицу Лицом, использующим JPA, требуется, чтобы у человека должно было быть поле типа Person, чтобы представлять родственника. У человека может быть родственник (другой человек), но он не является обязательным.Self Присоединиться к JPA

Я действительно запутался в том, как делать мои сопоставления. Я не уверен, может ли ключевое слово помочь мне здесь.

Я хотел бы понять, какой будет наилучший подход. Это то, что я сделал, но я думаю, что это неправильно. Может кто-нибудь помочь мне исправить это, а также объяснить мне, как это должно работать?

версия с использованием аннотаций

//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; 
    } 

версия с использованием дескриптора развертывания

<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

Я не знаю, как создать это сопоставление из памяти, но если у вас есть настройка БД, попробуйте использовать инструменты спящего режима для обратной инженерии БД и создания объектов jpa: http: // www .hibernate.org/подпроекты/tools.html – Vladimir

ответ

6

Я думаю, что это следует сделать трюк:

@OneToOne(optional = true) 
@JoinColumn(name = "SoulmateId") 
private Person soulmate; 
Смежные вопросы