Сущность «Автор» имеет набор объектов Advertising (двунаправленное отношение «один-ко-многим») и набор объектов «Телефон» (однонаправленное отношение «один-ко-многим»).
Автор
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.
Почему за столом?
@pirho, потому что мне нужны однонаправленные отношения "один ко многим" между автором и телефоном
Это означает, что вы не хотите / по какой-то причине невозможно добавить Author в Phone?
@pirho Мне не нужен автор поля в классе Phone
@pirho Я добавил метод сохранения автора. Согласитесь с вашим комментарием об удалении вызова метода сохранения EntityManager.
Я имел в виду, что когда вы передаете автора параметра методу: как вы создаете автора перед обновлением.
@pirho Добавлен json в код
@pirho И после сохранения автора я сохранил рекламу через JSON
Так это исходит от какого-то контроллера Spring или около того? Экземпляр автора?
@priho да, это исходит от контроллера, а контроллер получает его через привязку из JSON




@pirho, да, использую Hibernate, добавляю описания классов