Вопрос

У меня есть однозначное отношение, где я использую cascadetype.persist. Это со временем накапливается огромное количество детских записей, которые не были удалены, до такой продливания, что он отражен в производительности. Теперь я хочу добавить некоторый код, который очищает базу данных, удаляя все детские записи, которые не указаны родителем. На данный момент мы говорим 400K + Records, на которых мне нужно запустить код на всех установках клиентов, чтобы убедиться, что они не бегите в ту же проблему.

Я думаю, что лучшее решение будет запустить именованный запрос (потому что мы поддерживаем две базы данных), которые удаляют необходимые записи, и это где я попадаю в проблемы, потому что как я должен написать в JPQL?

Результат, который я хочу, может быть определен как следующее утверждение SQL, которое, в котором, к сожалению, не работает на MySQL.

DELETE FROM child c1
WHERE c1.pk NOT IN (SELECT DISTINCT p.pk FROM child c2
JOIN parent p ON p.child = c2.pk);
Это было полезно?

Решение

DELETE FROM child c
WHERE NOT EXISTS (SELECT 1 FROM parent WHERE child = c.pk)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top