@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private Book book;
это класс магазина.
В объекте книги есть version, id, name
Я отправляю объект магазина в запросе на создание.
Если яотправить
"book": {
"description": "string",
"documentId": 0,
"filterName": "string",
"id": 0,
"isBook": true,
"version": 0
},
это выдает ошибку:
caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: rally.services.center.domain.book.book
если я удаляю версию и отправляю это
"book": {
"description": "string",
"documentId": 0,
"filterName": "string",
"id": 0,
"isBook": true
ошибки нет.
Почему это может быть?},
Когда магазин удален, книга должна быть удалена, и то же самое для обновления, поэтому это CascadeType.ALL
и orphanRemoval = true
, это место, где она сохраняется
Book book = new Book(request.getBook());
Book savedBook = bookRepository.save(book);
выдает ошибку в последней строке.я не переопределил метод сохранения.
После того как я отправил это тело запроса, это dto.Таким образом, чтобы преобразовать его в сущность, я использовал это, fromDTO :
setDocumentId(bookDTO.getDocumentId());
setDescription(bookDTO.getDescription());
setId(bookDTO.getId());
setVersion(bookDTO.getVersion());
, поэтому я удалил строку id, и теперь она работает:
setDocumentId(bookDTO.getDocumentId());
setDescription(bookDTO.getDescription());
setVersion(bookDTO.getVersion());
iне знаю почему, но теперь это работает.
он использует fromdto для обновления и создает так для создания, не нужно устанавливать id для объекта, потому что он создаст новый.Для модификации, может быть, мне понадобится в будущем, но сейчас мне не нужен идентификатор.Потому что я даю идентификатор магазина, чтобы он обновлял книгу в нем, без необходимости в bookid.