1
我有一對一的關係,我使用CascadeType.PERSIST。隨着時間的推移,這將會產生大量未被刪除的兒童記錄,從而在性能上得到體現。 現在我想添加一些清理數據庫的代碼,刪除所有未被父級引用的子記錄。目前我們正在談論400K +記錄,因爲我需要在所有客戶安裝上運行代碼,以確保它們不會遇到同樣的問題。使用JPA刪除孤兒
我認爲最好的解決方案是運行一個命名查詢(因爲我們支持兩個數據庫),刪除必要的記錄,這是我遇到問題的地方,因爲我應該如何在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);