Я пытаюсь написать метод, который удалял бы сущность из таблицы book
, которая имеет отношение к сущностям из таблицы comments
. Идея состоит в том, чтобы удалить все записи в comments
при удалении записи в book
.
Может кто-нибудь помочь мне с этим? Я не знаю, что не так, это удаляет комментарии правильно, но тогда происходит ошибка. Метод от службы, ответственной за удаление, классы и сообщения от Spring ниже. Cheers
Ошибка выглядит следующим образом:
Servlet.service () для сервлета [dispatcherServlet] в контексте с исключением пути [] выбросило [Ошибка обработки запроса; Вложенное исключение - org.springframework.orm.jpa.JpaObjectRetrievalFailureException: невозможно найти birski.bookstore.models.Comment с идентификатором 1; вложенное исключение: javax.persistence.EntityNotFoundException: невозможно найти birski.bookstore.models.
Комментарий с идентификатором 1] с root причиной
Метод из службы, отвечающий за удаление объектов
public ResponseEntity<?> deleteBookDto(String bookTitle){
return bookRepository.findByTitle(bookTitle).map(b ->{
for (Comment comment : b.getComments()){
commentRepository.delete(comment);
}
bookRepository.delete(b);
return new ResponseEntity<>("Book titled: " + bookTitle + " was deleted!", HttpStatus.OK);
}).orElseThrow(()-> new ResourceNotFoundException("Book titled: " + bookTitle + " have not been found."));
}
Книжный класс
@Entity
@Table(name = "books", schema = "public")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "Title is required")
private String title;
@NotBlank(message = "Author is required")
private String author;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "book")
@OnDelete(action = OnDeleteAction.CASCADE)
private Set<Comment> comments = new HashSet<>();
public Book() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Set<Comment> getComments() {
return comments;
}
public void setComments(Set<Comment> comments) {
this.comments = comments;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Комментарий класса
@Entity
@Table(name = "comments", schema = "public")
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String author;
@NotNull
private String description;
@NotNull
private float rating;
@NotNull
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date date;
@ManyToOne//(cascade = CascadeType.ALL)
private Book book;
public Comment() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public float getRating() {
return rating;
}
public void setRating(float rating) {
this.rating = rating;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
}