CascadeType.PERSISTを使用する1対1の関係があります。これにより、パフォーマンスに反映される程度まで、削除されていない大量の子レコードが時間の経過とともに蓄積されてきました。ここで、データベースをクリーンアップして、親によって参照されていないすべての子レコードを削除するコードを追加したいと思います。現在、400K以上のレコードについて話しているので、同じ問題が発生しないようにするために、すべてのお客様のインストールでコードを実行する必要があります。
最善の解決策は、必要なレコードを削除する名前付きクエリを実行することだと思います(2つのデータベースをサポートしているため)。これは、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);