Порядок удаления спящего режима не поддерживается - PullRequest
0 голосов
/ 06 июля 2018

При удалении я удаляю записи из нескольких таблиц. У меня есть две таблицы .job_execution и job. Теперь я хочу удалить работу, поэтому сначала я должен удалить job_execution.

job_execution соответствует таблице заданий.

@ManyToOne(optional = false)
@JoinColumn(name = "job_id")
private Job job;

Теперь я удаляю

jobExecutionRepository.delete(jobExecution);
jobRepository.delete(job);

Но я получаю ОШИБКУ: обновление или удаление в таблице "job" нарушает ограничение внешнего ключа "job_execution_job_id_fkey" для таблицы "job_execution".

Я также проверил sql запросы и обнаружил, что запрос на удаление JobExecutionRepository не выполняется. Он напрямую называется запросом на удаление задания.

1 Ответ

0 голосов
/ 07 июля 2018

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

Удалить в спящем режиме применить в базе данных, когда session closed или session flush. Поэтому, как вы сказали, когда у вас есть отношения ребенка / родителя, как это; Сначала вы должны удалить дочерние элементы. Но запросы применяются и фиксируются, когда сеанс сбрасывается.

Таким образом, вы должны обработать это самостоятельно и сбросить или закрыть сеанс сразу после удаления потомков.

Или если у вас двунаправленное отношение и в родительской сущности есть множество дочерних элементов. Вы можете использовать cascade.remove или cascade.delete в режиме гибернации, чтобы управлять им автоматически.

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