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 递增。