Play JPA - ошибка: удаление отдельного экземпляра

1

Я использую Play Framework 2.4, и я получил эту ошибку:

[IllegalArgumentException: Removing a detached instance models.Account#8]
 In: (...)\models\Account.java
    JPA.em().remove(this)

Мой код выглядит так:


Я также попытался (как было предложено многими другими ответами на подобные вопросы):

JPA.em.remove(JPA.em().merge(this);

или

JPA.em().remove(Account.findById(this.id));

или добавление @Transactional к функции delete().

Но они оба приводят к

RollbackException: ошибка при совершении транзакции

,

ОБНОВЛЕНИЕ - Мое решение:

Это была смесь двух проблем:

  1. Я пропустил строку на выходе из консоли, указав, что существует ограничение из другой таблицы и что Учетная запись не может быть удалена.
  2. Экземпляр учетной записи, возвращаемый Component.currentAccount() был отдельным экземпляром, и я исправил это с помощью:

    Account current = JPA.em().merge(Component.currentAccount())

Теги:
playframework
jpa
persistence

1 ответ

1

Только предположение: Дерево объектов должно быть синхронизировано со структурой базы данных.

Если вы удалите обработанный JPA компонент, вы должны удалить его также из коллекций, где он также может быть частью.

Итак, если учетная запись является частью списка учетных записей в компании или указана в AccessGroup, вы должны удалить ее из этих элементов до удаления учетной записи. Это допустимо только в том случае, если эти другие объекты загружаются в вашу сессию JPA.

Исходная ошибка, которую вы опубликовали, должна была быть решена путем явной перезагрузки объекта или повторного подключения объекта с постоянным состоянием, как это было предложено другими.

Если моя догадка правильная, и вы используете спящий режим, ошибка фиксации сопровождается чем-то вроде deleted object would be re-saved by cascade.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню