我正在使用 spring-batch
作业将大型 csv
文件的内容保存到数据库中。
JpaItemWriter
用于持久化,到目前为止还不错。
但现在我想首先检查数据库中是否已经存在实体(通过 id
- csv 和数据库中的 id 字段相等),以防万一更新实体相反。
这是怎么做到的?
最佳答案
当我需要这样做时,我想出的最好办法是让我的自定义 FieldSetMapper(由 FlatFileItemReader 使用)从数据库加载项目(或创建一个不存在的新实例),然后设置基于输入的属性。由于 JpaItemWriter 使用 .merge,如果它是从数据库加载的,它将通过更新写入实体,如果它是一个新实体,它将插入。
我还需要让它以 1 的批量大小运行,以确保如果我的输入中有重复项(我确实有),它实际上会一次一行并为每一行插入或更新并且不要尝试一次将它们全部插入,从而导致关键问题。
如您所想,所有这些工作比我希望的要慢很多。它查询数据库中的每一行,然后进行相应的更新或插入。但就我的情况而言,它是每月一次的通宵批处理,足以满足我们的需求,即使它需要花费很多时间来运行。
关于java - 如何使用 JpaItemWriter 更新现有实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890307/