Добавить Person
- не person.id - к вашему Membership
:
@ManyToOne
private Person person;
Это будет читаться примерно как «Многие члены могут принадлежать одному человеку» . Если вы удалите один или несколько Membership
, они не будут удалены Person
; просто больше не будет удалено членство.
Чтобы все Memberships
из одного Person
были удалены - при удалении Person
- добавьте список участников в Person
:
@OneToMany(cascade = CascadeType.ALL, mappedBy="person") // maybe CascadeType.REMOVE is enough for you
private List<Membership> memberships = new ArrayList<>();
На самом деле без этого вы не сможете удалить любой Person
до того, как удалите все его Membership
с; последний имеет ограничение внешнего ключа Person
.
Это будет читаться примерно как «Один человек может иметь много членов» . Если вы удалите Person
, все его Memberships
также будут удалены.
Список необходим, потому что таким образом JPA может каскадно удалить на Membership
для этого CascadeType.ALL
(или удалить).
Атрибут mappedBy
указывает JPA проверить поле person
для сопоставления. Если JPA не может иначе найти поле для сопоставления, оно создаст отдельную таблицу для сопоставления.