Обновление в PUT запросе
Есть две сущности:
Book
@Entity
@Table(name="book")
@Getter
@Setter
public class BookEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "vendor")
private String vendor;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@OneToMany(mappedBy = "genreBookId", cascade = CascadeType.ALL)
private List<GenreEntity> genres;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="library_id")
private Library libraryId;
public BookEntity() {
}
и Genre
@Entity
@Table(name="genre")
@Getter
@Setter
public class GenreEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="book_id")
private BookEntity genreBookId;
public GenreEntity() {
}
}
Сервис
@Override
public BookEntity updateBook(Long bookId, BookEntity updateBook) throws BookNotFoundException {
return bookRepository.findById(bookId)
.map(book -> {
book.setVendor(updateBook.getVendor());
book.setTitle(updateBook.getTitle());
book.setDescription(updateBook.getDescription());
updateBook.getGenres().forEach(g -> g.setGenreBookId(book));
book.setGenres(updateBook.getGenres());
return bookRepository.save(book);
})
.orElseThrow(() -> new BookNotFoundException("Книга с таким идентификатором не найдена")); //исправить
}
Запросы выполняю через Postman.
Отправляя такой put запрос
{
"vendor": "7613252153-32",
"title": "Название",
"description": "Описание",
"genres": [
{
"title": "Другой жанр"
},
{
"title": "Другой жанр2"
},
{
"title": "Ещё один жанр"
}
],
"libraryId": 1
}
в столбце genres данные не обновляются, а добавляются, т.е. к двум предыдущим добавляются ещё 3 жанра
"genres": [
{
"title": "Старый жанр"
},
{
"title": "Старый жанр2"
},
{
"title": "Другой жанр"
},
{
"title": "Другой жанр2"
},
{
"title": "Ещё один жанр"
}
]