Spring Batch 为下一次插入获取自动生成的 ID
Posted
技术标签:
【中文标题】Spring Batch 为下一次插入获取自动生成的 ID【英文标题】:Spring Batch Get Autogenerated Id for next Insert 【发布时间】:2021-08-16 21:56:55 【问题描述】:我正在编写一个 spring 批处理应用程序,并且有一个输入 csv 文件,该文件具有多行,其中包含唯一的人名和他们的电话号码。在 csv 中,我保证人与电话号码是一对一的关系,但是我想将这些插入到数据库中,其中人与电话之间存在一对多的关系。
我知道如何单独插入每个人,但是在插入电话时,我想获取插入人以创建一对多关系时自动生成的 ID。
除非我编写一个自定义处理器将 http 请求发送到后端或直接访问数据库以创建人员,然后使用编写器创建电话号码条目,否则不确定最好的方法。
【问题讨论】:
这能回答你的问题吗? mysql & Java - Get id of the last inserted value (JDBC) 不完全是,如果我在处理器中使用它可能就是这样做的,但我认为这不是最佳方式。会认为有更好的方法来做到这一点。 定义“更好” 更少的代码和编写一堆样板代码来连接数据库。认为有一种方法可以像使用基本插入一样使用弹簧批处理,但具有更多逻辑。 好吧,您可以简单地使用您的 RDBMS 提供的方法来获取最后一个插入 ID,并将其合并到您的INPUT
语句中。问题是,插入第一个电话号码后,就不再返回人名了
【参考方案1】:
只需在 SQL 中的第一个插入周围使用 WITH 语句,然后使用该临时结果返回 id,就能够做到这一点。然后在外面使用 insert into select from 在另一个表上进行第二次插入。给第二个插入 id 变量,然后为其他列值插入“consts”。
https://gist.github.com/yodigi7/5982bc31662e5160389ccb46b39ae558
【讨论】:
以上是关于Spring Batch 为下一次插入获取自动生成的 ID的主要内容,如果未能解决你的问题,请参考以下文章
从DB2获取数据并使用没有元数据表的Spring Batch保存在MongoDB中
避免使用 maven-release-plugin 为下一次开发迭代更新 POM 版本
当 Spring Batch 插入 BATCH_JOB_EXECUTION 时出现 BadSqlGrammarException