【问题标题】:Deleting orphans with JPA使用 JPA 删除孤儿
【发布时间】: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


    【解决方案1】:
    DELETE FROM child c
    WHERE NOT EXISTS (SELECT 1 FROM parent WHERE child = c.pk)
    

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2013-06-05
      • 2018-03-31
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      相关资源
      最近更新 更多