如何使用JpaItemWriter更新现有实体?

时间:2014-11-12 15:17:22

标签: java spring csv spring-batch

我使用spring-batch个作业将大csv个文件的内容保存到数据库中。 JpaItemWriter用于持久性,到目前为止很好。

但是现在我想首先检查一个实体是否已经存在于数据库中(由id - csv和数据库中的id字段相等),以防万一只更新实体

怎么可以这样做?

1 个答案:

答案 0 :(得分:1)

当我需要这样做时,我想到的最好的是让我的自定义FieldSetMapper(由FlatFileItemReader使用)从数据库加载项目(或创建它的新实例不存在)然后根据输入设置属性。由于JpaItemWriter使用.merge,它将通过更新来编写实体,如果它是从数据库加载的,则插入它是否是新实体。

我还需要让它以批量大小1运行,以确保如果我的输入中有重复项(我确实有),它实际上会一次一行并插入或更新每一行而不是试图一次性插入它们导致关键问题。

正如您可能想象的那样,所有这些都比我希望的慢了很多。它在数据库中查询每一行,然后执行相应的更新或插入。但就我的情况来说,这是一个月的隔夜批处理过程,它足以满足我们的需求,即使它需要花费很多时间才能运行。