2016-08-15 3 views
0

int 열을 varchar로 수정하려고했지만이 오류로 시작하는 것이 많습니다.Liquibase liquibase liquibase.exception.ValidationFailedException : 유효성 검사 실패 :

@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; 
    } 

이것은 도메인의 열입니다. enum입니다.

이것이 liquibase confg

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

여기 변경하려 시도이다 ENUM

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; 
    } 
} 

이다. 또는 이것을 안으로 추가했습니다. 20160616145216

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

그러나 작동하지 않았습니다.

2 변경 세트 check sum |
클래스 경로 설정/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
| | at liquibase.changelog.DatabaseChangeLog.validate (DatabaseChangeLog.java:215) | liquibase.Liquibase.update (Liquibase.java:208) | liquibase.Liquibase.update (Liquibase.java:192) | at liquibase.integration.spring.SpringLiquibase.performUpdate (SpringLiquib.java:434) | at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet (SpringLiquibase.java:391) | at net.infoowl.fraud.config.liquibase.AsyncSpringLiquibase.initDb (AsyncSpringLiquibase.java:63) 1 | at net.infoowl.fraud.config.liquibase.AsyncSpringLiquibase.lambda $ afterPropertiesSet $ ​​0 (AsyncSpringLiquibase.java:49) | at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) | at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) | 또한

rror java.lang.Thread.run (Thread.java:745)에서 알 수없는 이름 값 [0] ENUM 클래스 대 [net.infoowl.fraud.domain.util .MerchantStatus]; 중첩 예외는 입니다. java.lang.IllegalArgumentException : 열거 형에 대해 알 수없는 이름 값 [0] 클래스 [net.infoowl.fraud.domain.util.MerchantStatus 또한

<

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

후도 내가 사랑하는 수행 할 때

여전히 doesnot 당신은 liquibase의 변경 집합을 수정 한 것으로 보인다

+0

당신은 이미 Liquibase에 의해 실행 된 liquibase 변경 집합을 수정 한 것 같습니다. 그러지 마십시오 : 이전 버전으로 되돌리고 새로운 changeset를 추가하십시오. –

+0

변경 집합에 유용합니까? 내가이 후 DIFF 수행 할 때 또한 < newDataType = "VARCHAR (255)" TABLENAME = "상인"modifyDataType COLUMNNAME = "상태"/> 는 여전히 doesnot – fff

+0

당신이 무엇을 의미합니까 VARCHAR로 변환? 어떤 일이 발생할 것으로 예상합니까? –

답변

1

VARCHAR로 변환 그것은 이미 Liquibase에 의해 실행되었습니다. 그러지 마십시오 : 이전 버전으로 되돌리고 새로운 changeset를 추가하십시오.

그런 다음 해당 열의 모든 0을 '활성'으로 변환하고 해당 열의 모든 1을 '수동'으로 변환하는 또 다른 변경 집합 (또는 작업)을 추가하십시오.