No enum constant
이렇게 enum으로 변환하다가 가끔 No enum constant enum.값 이라는 에러가 발생할 때가 있다.
이 에러가 발생하는 원인은 Entity에서 사용하는 Enum에 존재하지 않는 값이 데이터베이스의 해당 컬럼에 존재할 경우 발생하는 오류이다. (대소문자를 구분한다.)
너무나도 직관적인 오류지만 원인을 잘 찾지 못하는 경우가 있을 수 있는 시나리오가 있다.
application.properties 파일에 다음과 같이 hibernate.ddl-auto를 걸어놓은 상태에서,
spring.jpa.hibernate.ddl-auto=update
혹은 application.yml 파일을 사용한다면 아래와 같이 사용중이라면
spring:
jpa:
hibernate:
ddl-auto: update
Entity에 필드에 enum 필드가 없다가 나중에 Entity의 필드에 enum value를 추가한 경우, ddl update 설정으로 인해 기존 db rows는 그대로 있고, enum 컬럼이 하나 추가되어 기존에 DB 있던 데이터들은 새로 생긴 컬럼에 Null 값을 갖게 된다.
이때 수정된 Entity를 조회 하여 기존 db에 있던 row가 조회되는 경우에도 No enum constant 에러가 발생할 수 있다.