Skip to content

@Enumulated를 사용하지 않고 @AttributeConverter를 사용한 이유

Jiwoo edited this page Oct 4, 2021 · 2 revisions

현재 데이터베이스엔 꿈 유형, 꿈 품질과 같은 상태 값들을 char(4) 타입의 코드값으로 저장한다.

@Enumulated를 사용했을 경우에 테이블의 코드값과 Java Enum을 맵핑시키기위해 @Enumerated(EnumType.STRING)을 사용할 수 있을 것이다.

테이블의 컬럼값과 Enum name을 바로 맵핑한다는 것 때문에 Enum 이름이 수정되었을 때 데이터베이스 값이 손상될 수 있다는 문제가 있다. 수정해야 할 상황이 생기든 실수로 바꾸든 코드에서 사용하는 값이 바로 데이터베이스 값으로 들어간다는 것이 유연하지 못한 설계라고 생각하였고 JPA 2.1에서 생긴 엔티티 속성 타입과 데이터베이스 값을 서로 변환하는데 사용할 수 있는 표준화된 API인 @Converter 어노테이션을 사용하였다.

Converter를 이용하여 기존 데이터베이스에 있는 데이터를 손상시지 않고 새로운 Enum값을 수정하거나 추가하는 것이 가능하다.

데이터베이스 코드값을 Enum으로 빠르게 바꾸기 위해 Stream을 한 번만 열도록 HashMap을 사용하였다.

Clone this wiki locally