JPA CascadeType.ALL не удаляет дочерний элемент - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть 2 класса в java с отношением parent-child, и у меня есть проблема с удалением child.когда я удаляю дочерний элемент, функция возвращает true, но когда я проверяю базу данных, ничего не происходит, дочерний элемент все еще не удаляется.

это мой родительский класс: Engagement.java

@OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade=CascadeType.ALL)
 private Collection<Sub_Engagement> subs_engs;

это мойдочерний класс: Sub_Engagement.java

@ManyToOne
 @JoinColumn(name="parent")
 private Engagement parent;

с этим кодом POST / GET / PATCH работает нормально, но DELETE не работает.

Я пробовал подобное решение:

@OneToMany(fetch=FetchType.EAGER, mappedBy="parent", orphanRemoval = true, cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE})
 private Collection<Sub_Engagement> subs_engs;

и УДАЛИТЬ работает, но PATCH / PUT не работает, когда я пытаюсь обновить ребенка.Заранее спасибо:)

1 Ответ

0 голосов
/ 06 марта 2019

Андроник понял, что действительно должно работать.Странно, что у вас возникли ситуации с обновлениями и удалениями.

Дважды проверьте файл persistence.xml.Есть ли что-то, что переопределяет аннотации?

Я также рекомендую включить трассировку и проверить фактически выполненные запросы sql.Записан ли оператор удаления?Действительно ли ваша транзакция зафиксирована?

Можем ли мы взглянуть на код, который вы используете для удаления сущностей?Используете ли вы метод entity (), выполняемый entitymanager, или выполняете какой-то пользовательский jpql?

Кроме того, вы используете CMT (например, EJB) или обрабатываете транзакции самостоятельно через JTA?

...