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

标签 java spring csv spring-batch

我正在使用 spring-batch 作业将大型 csv 文件的内容保存到数据库中。 JpaItemWriter 用于持久化,到目前为止还不错。

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

这是怎么做到的?

最佳答案

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

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

如您所想,所有这些工作比我希望的要慢很多。它查询数据库中的每一行,然后进行相应的更新或插入。但就我的情况而言,它是每月一次的通宵批处理,足以满足我们的需求,即使它需要花费很多时间来运行。

关于java - 如何使用 JpaItemWriter 更新现有实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890307/

相关文章:

JavaFX StackedBarChart - 清除系列在图表中留下不可见的数据

java - Spring Session JDBCTokenRepository 覆盖默认表

node.js - AWS Lambda 中的流转换导致结束后写入错误

ruby-on-rails - rails csv.erb View 包含空格

python - 加快处理庞大数据集的 Python 文件

java - 在专业 java 应用程序中哪个是首选 jSTL 中的 SQL 或仅在 servlet 中

java - 没有父 pom 故障安全集成测试的 Spring Boot 失败

Java正则表达式查找特定文件

Java Spring Batch - 从 jar 执行

java - 错误类型错误: Cannot set property 'name' of undefined