У меня есть взаимно однозначное отношение, где я использую CascadeType.PERSIST. Это со временем создает огромное количество дочерних записей, которые не были удалены, до такой степени, что это отражается в производительности. Теперь я хочу добавить код, который очищает базу данных, удаляя все дочерние записи, на которые не ссылается родитель. На данный момент мы говорим записи 400K +, мне нужно запустить код на всех установках клиента, чтобы убедиться, что они не сталкиваются с той же проблемой.Удаление сирот с JPA
Я думаю, что лучшим решением было бы запустить именованный запрос (потому что мы поддерживаем две базы данных), который удаляет необходимые записи, и именно здесь я сталкиваюсь с проблемами, потому что как я должен писать его в JPQL?
Результат, который я хочу, может быть определен как следующий оператор sql, который unfortunaltely не запускается на 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);