我正在将spring,liquibase与hsql数据库一起使用。我正在为一个表创建一个序列,比方说示例表。该序列将从liquibase中创建,如下所示:
<changeSet id="xx" author="yy" dbms="hsql">
<preConditions onFail="MARK_RAN">
<not>
<sequenceExists sequenceName="example_id_sequence"/>
</not>
</preConditions>
<createSequence sequenceName="example_id_sequence" startValue="${hsql.exampleSequenceCount}" incrementBy="1"/>
</changeSet>
正如您在此处注意到的那样,该序列的startValue是使用liquibase bean的changelog参数从外部Java代码获得的。
第一次启动工作正常。将一些数据插入后 示例表,当我重新启动startValue时,现在将为最大Id + 1 表的值,则返回该值。
因此校验和改变并且抛出错误。我尝试包括前提条件,但那也没有用。有没有类似的解决方法
如果存在序列,请不要检查校验和,也不要 创建一个新序列
答案 0 :(得分:1)
要解决此问题,请尝试添加:
<validCheckSum>your-check-sum</validCheckSum>
或:
<validCheckSum>ANY</validCheckSum>
它应该使此changeSet的checkSum保持常量(在ANY
的情况下应为非无关紧要),因此此changeSet将仅执行一次。