1

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);
4

1 に答える 1

4
DELETE FROM child c
WHERE NOT EXISTS (SELECT 1 FROM parent WHERE child = c.pk)
于 2010-04-19T08:20:38.797 に答える