Версия Hibernate - вызвано: org.hibernate.PersistentObjectException: отсоединенная сущность, переданная для сохранения: - PullRequest
0 голосов
/ 27 сентября 2018
@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.

1 Ответ

0 голосов
/ 27 сентября 2018

Используйте CascadeType.MERGE

Или Можете ли вы попробовать использовать saveOrUpdate () или merge () метод гибернации.

Или оформить заказ по ссылке (уже заданной)

JPA / Hibernate: отдельная сущность передана для сохранения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...