Сущность Author имеет коллекцию объектов Advertising (двунаправленное отношение один-ко-многим) и коллекцию Phone (однонаправленное отношение один-ко-многим).
Автор
public class Author {
@Id
@GeneratedValue
private int id;
private String nameOfAuthor;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "author_phone",
joinColumns = @JoinColumn(name = "author_fk_id"),
inverseJoinColumns = @JoinColumn(name = "phone_fk_id"))
@Fetch(FetchMode.SELECT)
private List<Phone> phones = new LinkedList<>();
@OneToMany(mappedBy = "author", cascade = CascadeType.ALL,
orphanRemoval = true, fetch = FetchType.EAGER)
private List<Advertisement> advertisements = new ArrayList<>();
}
Телефон
public class Phone {
@Id
@GeneratedValue
private int id;
@Column(name = "phone_number")
private String phoneNumber;
}
Реклама
public class Advertisement {
@Id
@GeneratedValue
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "advert_author_id_fk")
@Fetch(FetchMode.JOIN)
private Author author;
}
Метод сохранения Автор:
public void add(Author author) {
em.persist(author);
}
Метод обновления Автор:
@PersistenceContext
private EntityManager em;
public void update(Author author) {
Author merge = em.merge(author);
em.persist(merge);
}
Когда я отправляю json для обновления, существующего в базе данных Автор выглядит так:
{
"id": 2,
"nameOfAuthor": "Segey",
"advertisements": [],
"phones":[]
}
JSON для сохранения автора:
{
"nameOfAuthor": "Segey",
"advertisements":[],
"phones":[
{
"phoneNumber": "33333"
}
]
}
Я не знаю, почему JPA удаляет все phones
, но не advertisements
.