1
CascadeType.PERSIST를 사용하는 일대일 관계가 있습니다. 이것은 시간이 지남에 따라 삭제되지 않은 엄청난 양의 자식 레코드를 성능에 반영되도록 확장합니다. 이제 부모가 참조하지 않는 모든 하위 레코드를 제거하는 데이터베이스를 정리하는 코드를 추가하고 싶습니다. 현재 우리는 400K + 레코드에 대해 이야기하고 있으며 모든 고객 설치에서 코드를 실행하여 동일한 문제가 발생하지 않도록해야합니다.JPA로 고아 삭제하기
필자는 최적의 솔루션은 필요한 레코드를 삭제하는 명명 된 쿼리 (두 개의 데이터베이스를 지원하기 때문에)를 실행하는 것이고 이것이 문제가되는 곳이라고 생각합니다. JPQL에서 어떻게 작성해야합니까?
원하는 결과는 MySQL에서 불행히도 실행되지 않는 다음 SQL 문과 같이 정의 할 수 있습니다.
DELETE FROM child c1
WHERE c1.pk NOT IN (SELECT DISTINCT p.pk FROM child c2
JOIN parent p ON p.child = c2.pk);