使用JPA @NamedQuery

时间:2018-02-23 12:34:08

标签: java spring hibernate jpa

我在尝试使用JPA @NamedQuery从备用表执行DELETE时遇到了一些麻烦。

我想创建一个 @Schedule任务来为 MyEntityDB 中的某些孤儿数据安排删除作业。

我将 NOT EXISTS 与MyEntityDB中的数据与OTHER_TABLE中的其他数据进行比较,然后删除MyEntityDB中的数据,而不存在于OTHER_TABLE 中。

为此,我创建了一个 MyEntityRepository 接口来创建删除方法。

有了这个,我想运行预定的任务。

我应该如何处理这个解决方案?

MyEntity.java

@NamedQueries({
    @NamedQuery(
        name = "deleteOrphans",
        query = "DELETE FROM MyEntity " +
                "WHERE NOT EXISTS (" +
                    "SELECT NULL FROM OTHER_TABLE ot " +
                    "WHERE ot.ID = :myEntityId)"
                )
})

MyEntityRepository.java

void deleteOrphans();

1 个答案:

答案 0 :(得分:0)

JPA可以在父母被删除后立即删除您的孤儿

在父级实体上,您必须设置orphanRemoval

@OneToMany(mappedBy="parent", orphanRemoval="true")
public List<Orphan> orphans;

这样你就不需要预定的任务,清理&#34;你的数据库