【发布时间】:2016-12-21 17:25:25
【问题描述】:
我尝试将 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 配置
<column name="status" type="INT"/>
我试图改变这里。或者我在 20160616145216 中添加了这个
<modifyDataType
columnName="status"
newDataType="varchar(255)"
tableName="merchant"/>
但它不起作用。
2 个变更集校验和 |
类路径:config/liquibase/changelog/20160616145216_create_merchant.xml::1466077959485-1:: (生成)现在是:7:5fb40924426396399804bb2cb7f74852
|
类路径:config/liquibase/changelog/20160720101800_load_data.xml::0000000000001-2:: (生成)现在是:7:aa0084f69ca5301ef48cfb97beb41582
| | | liquibase.exception.ValidationFailedException:验证失败: f | 2 个变更集校验和 |
类路径:config/liquibase/changelog/20160616145216_create_merchant.xml::1466077959485-1:: (生成)现在是:7:5fb40924426396399804bb2cb7f74852
|
类路径:config/liquibase/changelog/20160720101800_load_data.xml::0000000000001-2:: (生成)现在是:7:aa0084f69ca5301ef48cfb97beb41582
| |在 liquibase.changelog.DatabaseChangeLog.validate(DatabaseChangeLog.java:215) |在 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)
还有
错误:枚举类的未知名称值 [0] [net.infoowl.fraud.domain.util.MerchantStatus];嵌套异常是 java.lang.IllegalArgumentException:枚举的未知名称值 [0] 类 [net.infoowl.fraud.domain.util.MerchantStatus]
还有
还有当我在这之后做差异时
modifyDataType
columnName="status"
newDataType="varchar(255)"
tableName="merchant"/>
它仍然没有转换为 varchar
【问题讨论】:
-
您似乎修改了已由 Liquibase 执行的 liquibase 变更集。不要这样做:恢复到以前的版本,并添加一个新的变更集。
-
对变更集有好处吗?同样,当我在此
之后进行差异时,它仍然不会转换为 varchar -
什么意思?您预计会发生什么以及会发生什么?
-
我想在前端查看字符串值,但尽管它说 rror: Unknown name value [0] for enum class [net.infoowl.fraud.domain.util.MerchantStatus];嵌套异常是 java.lang.IllegalArgumentException: Unknown name value [0] for enum class [net.infoowl.fraud.domain.util.MerchantStatus] © 也添加到问题中。
-
将列的类型从 int 更改为 varchar 不会神奇地将所有值从 0 更改为 'ACTIVE' 和从 1 更改为 'PASSIVE'。您也需要将其添加到您的变更集中。
标签: java xml spring multithreading liquibase