liquibase + jdbctemplate 更新语句 - 自动增量问题
liquibase + jdbctemplate update statement - autoincrement issue
在 liquibase changset 中,我正在向数据库中插入一些记录
<changeSet id="test" author="xyz">
<insert tableName="testtable">
<column name="id" value="1"/>
<column name="name" value="testdata"/>
</insert>
</changeSet>
然后使用 jdbcTemplate 我尝试使用实例 update() 方法插入新行。
jdbcTemplate.update(
"INSERT INTO test.testtable(name) VALUES (?)",
new Object[] {
someObject.getName()
});
当第一次使用 运行 以上方法时,我收到错误消息,指出 table 中已存在具有此 ID 的记录。但是,当我重复操作时,我成功地增加了值为 2 的 ID。
如何将liquibase和jdbcTemplate整合在一起解决这个问题?我希望 jdbcTemplate 会以某种方式识别出此 ID 1 已被占用,并插入具有递增的、无冲突的唯一 ID 的数据。
我正在使用 postgres。
是否有任何选项可以在不删除具有硬编码 ID 值的 liquibase 条目的情况下执行此操作?
I would expect that jdbcTemplate will somehow recognize that this ID
1 is already occupied and insert data with incremented,
non-conflicting, unique ID.
这不会发生。 Liquibase 查看环境中是否存在变更集 运行(通过检查数据库变更日志 table 中是否存在变更集 ID)。如果它不存在,它将 运行 变更集。就这么简单,Liquibase 没有为你做任何考虑,你必须确保插入在任何合理的条件下都能工作。
我确实喜欢上面评论中的建议,即不要插入 id,而是使用 auto-increment 如果您希望始终插入并使 id 递增。
在 liquibase changset 中,我正在向数据库中插入一些记录
<changeSet id="test" author="xyz">
<insert tableName="testtable">
<column name="id" value="1"/>
<column name="name" value="testdata"/>
</insert>
</changeSet>
然后使用 jdbcTemplate 我尝试使用实例 update() 方法插入新行。
jdbcTemplate.update(
"INSERT INTO test.testtable(name) VALUES (?)",
new Object[] {
someObject.getName()
});
当第一次使用 运行 以上方法时,我收到错误消息,指出 table 中已存在具有此 ID 的记录。但是,当我重复操作时,我成功地增加了值为 2 的 ID。
如何将liquibase和jdbcTemplate整合在一起解决这个问题?我希望 jdbcTemplate 会以某种方式识别出此 ID 1 已被占用,并插入具有递增的、无冲突的唯一 ID 的数据。
我正在使用 postgres。
是否有任何选项可以在不删除具有硬编码 ID 值的 liquibase 条目的情况下执行此操作?
I would expect that jdbcTemplate will somehow recognize that this ID 1 is already occupied and insert data with incremented, non-conflicting, unique ID.
这不会发生。 Liquibase 查看环境中是否存在变更集 运行(通过检查数据库变更日志 table 中是否存在变更集 ID)。如果它不存在,它将 运行 变更集。就这么简单,Liquibase 没有为你做任何考虑,你必须确保插入在任何合理的条件下都能工作。
我确实喜欢上面评论中的建议,即不要插入 id,而是使用 auto-increment 如果您希望始终插入并使 id 递增。