Liquibase liquibase.exception.ValidationFailedException:验证失败:

时间:2016-08-15 13:41:22

标签: java xml spring multithreading liquibase

我尝试将int列修改为varchar,但从此开始会出现很多错误。

    @NotNull
    @Column(nullable = false)
    @Enumerated(value = EnumType.STRING)
    private MerchantStatus status;

   public MerchantStatus getStatus() {
        return status;
    }

    public Merchant setStatus(MerchantStatus status) {
        this.status = status;
        return this;
    }

这是域中的列。它是枚举。

这是枚举

public enum MerchantStatus {
    ACTIVE("merchant.status.active"),
    PASSIVE("merchant.status.passive");

    private String key;

    MerchantStatus(String key) {
        this.key = key;
    }

    public String getKey() {
        return key;
    }
}

这是liquibase confg

<column name="status" type="INT"/>

我试着在这里改变。或者我在20160616145216内添加了这个

<modifyDataType
                        columnName="status"
                        newDataType="varchar(255)"
                        tableName="merchant"/>

但它不起作用。

  

2变更集校验和|
  类路径:配置/ liquibase /变化/ 20160616145216_create_merchant.xml :: 1466077959485-1 ::   (生成)现在是:7:5fb40924426396399804bb2cb7f74852
  |
  类路径:配置/ liquibase /变化/ 20160720101800_load_data.xml :: 0000000000001-2 ::   (生成)现在是:7:aa0084f69ca5301ef48cfb97beb41582
  | | |   liquibase.exception.ValidationFailedException:验证失败:   f | 2变更集校验和|
  类路径:配置/ liquibase /变化/ 20160616145216_create_merchant.xml :: 1466077959485-1 ::   (生成)现在是:7:5fb40924426396399804bb2cb7f74852
  |
  类路径:配置/ liquibase /变化/ 20160720101800_load_data.xml :: 0000000000001-2 ::   (生成)现在是:7:aa0084f69ca5301ef48cfb97beb41582
  | |在   liquibase.changelog.DatabaseChangeLog.validate(DatabaseChangeLog.java:215)     | at liquibase.Liquibase.update(Liquibase.java:208)      |在liquibase.Liquibase.update(Liquibase.java:192)       |在   liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:434)      |在   liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:391)       |在   net.infoowl.fraud.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:63)   1 |在   net.infoowl.fraud.config.liquibase.AsyncSpringLiquibase.lambda $ $的afterPropertiesSet 0(AsyncSpringLiquibase.java:49)        |在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     |在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     |在java.lang.Thread.run(Thread.java:745)

  

rror:枚举类的未知名称值[0]   [net.infoowl.fraud.domain.util.MerchantStatus];嵌套异常是   java.lang.IllegalArgumentException:枚举的未知名称值[0]   class [net.infoowl.fraud.domain.util.MerchantStatus]

此外

当我在此之后做差异时

&LT;

modifyDataType
                        columnName="status"
                        newDataType="varchar(255)"
                        tableName="merchant"/>

它仍然没有转换为varchar

1 个答案:

答案 0 :(得分:3)

您似乎修改了Liquibase已执行的liquibase变更集。不要这样做:恢复到以前的版本,并添加一个新的变更集。

然后添加另一个changeSet(或任务),将该列中的所有0转换为&#39; ACTIVE&#39;,并将该列中的所有1转换为&#39; PASSIVE&#39;。