如何删除 ItemWriter 中的对象?

How to delete objects in ItemWriter?

我正在使用 spring-batch 进行数据导入。但是在 writer() 步骤中,我不想保留已处理的项目,而是从数据库中删除它们(通过 id)。

问题:像 JpaItemWriter 这样的 ItemWriters 只是用于持久化项目。有没有作家可以让我通过 CrudRepository 并调用 repository.delete(id)?

JpaItemWriter不支持删除。但是...我们确实有一个 RepositoryItemWriter,您可以配置调用的方法。因此,在您的情况下,您可以将它与 Spring 数据中的 JpaRepository 结合使用,并将方法配置为删除。这将删除您传入的项目(如果您要按 id 删除,您需要创建一个处理器来接收该项目并返回 id)。您可以在此处阅读有关 RepositoryItemWriter 的更多信息:https://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/data/RepositoryItemWriter.html

作为替代方案,您可以子类化 JpaItemWriter 并覆盖 doWrite 方法以调用 entityManager.remove 而不是它当前执行的 entityManager.merge...