Как отобразить объекты рекурсии OneToOne? - PullRequest
0 голосов
/ 25 марта 2019

Я ищу, как решить рекурсивные и двунаправленные однотонные отношения в моем объекте Branch:

@Entity
@Table("BRANCH")
public class Branch {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "name")
private String name;

@OneToOne
@JoinColumn(name = "id")
private Branch parent;

@OneToOne(mappedBy = "parent")
@JoinColumn(name = "parent_id")
private Branch child;

//Getters and Setters
}

Это принятый шаблон?

1 Ответ

0 голосов
/ 25 марта 2019

Правильный способ двунаправленного отображения @OneToOne с собственной ссылкой:

@Entity
@Table("BRANCH")
public class Branch {

@OneToOne
@JoinColumn(name = "parent_id")
private Branch parent;

@OneToOne(mappedBy = "parent")
private Branch child;
  • это предок для объекта в дочернем поле
  • это потомок для объекта в родительском поле
  • Иерархия: родитель> этот> ребенок

Вам не нужны два внешних ключа, один внешнего ключа в владеющей стороне отношений достаточно. В JPA обратный OneToOne должен использовать атрибут mappedBy.

https://en.wikibooks.org/wiki/Java_Persistence/OneToOne#Inverse_Relationships,_Target_Foreign_Keys_and_Mapped_By

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...