【发布时间】:2011-02-09 14:20:53
【问题描述】:
我有一个一对一的关系,我使用 CascadeType.PERSIST。随着时间的推移,这会积累大量未删除的子记录,以至于它反映在性能中。 现在我想添加一些代码来清理数据库,删除所有没有被父项引用的子记录。目前我们正在讨论 400K+ 记录,我需要在所有客户安装上运行代码,以确保他们不会遇到同样的问题。
我认为最好的解决方案是运行一个命名查询(因为我们支持两个数据库)来删除必要的记录,这就是我遇到问题的地方,因为我应该如何在 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);
【问题讨论】:
标签: java jpa jpql named-query