liquibase + jdbctemplate更新语句-自动增量问题

问题描述

在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()
        });

首次运行上述方法时,出现错误,表明该ID记录已存在于表中。但是,当我重复操作时,我成功获得ID为2的递增ID。

如何将liquibase和jdbcTemplate集成在一起以消除此问题?我希望jdbcTemplate会以某种方式识别出该ID 1已被占用,并插入具有递增的,无冲突的唯一ID的数据。

我正在使用postgres。

是否可以选择不删除带有硬编码ID值的liquibase条目?

解决方法

我希望jdbcTemplate将以某种方式识别该ID 1已被占用,并以递增的方式插入数据, 无冲突的唯一ID。

这不会发生。 Liquibase会查看更改集是否已在环境中运行(通过检查更改集ID是否存在于databasechangelog表中)。如果不存在,它将运行变更集。就是这么简单,Liquibase不会为您做任何事情,您必须确保插入件可以在任何合理的条件下工作。

我确实希望上面的注释中的建议不要插入ID,而是在您希望始终插入并让ID递增的情况下使用自动递增。