Ваше текущее отображение синтаксически неверно, потому что только одна сторона отношений может быть стороной-владельцем. Обладающая сторона - это поле, определяемое значением атрибута mappedBy
. Более подробное объяснение можно найти по здесь .
Также удаление mappedBy
с одной стороны не решает проблему, потому что аналог OneToMany
должен быть ManyToOne
. Удаление его с обеих сторон оставляет нам две однонаправленные ассоциации, что тоже не то, что нужно.
Поскольку у каждого Business
может быть несколько родителей, и, по-видимому, предпочтительнее иметь возможность переходить непосредственно к детям, решение состоит в том, чтобы использовать двунаправленный ManyToMany
:
@Entity
public class Business {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(mappedBy = "parents")
private Collection<Business> childrens;
@ManyToMany
private Collection<Business> parents;
}
С точки зрения базы данных это означает следующие таблицы:
Business(id)
Business_Business(childrens_id, parents_id)
При необходимости имя таблицы и столбцов соединения можно контролировать с помощью JoinTable .