@Enumerated 어노테이션
enum의 값을 DB에 name 그대로 저장하기 위해 @Enumerated 어노테이션을 사용해왔는데 이럴 경우 enum의 값이 변경 되었을 경우나 order 순서가 변경되었을 때 DB에 저장된 값과 enum의 값이 매칭되지 않아 문제가 발생할 수 있음.
@Enumerated 어노테이션 대신 AttributeConverter 이용하여 해당 문제 해결
@Converter
@Converter 어노테이션은 엔티티의 데이터를 DB에서 가져올 때 변환하는 방법에 대한 로직과 DB에서 엔티티의 데이터를 가져올 때의 변환하는 방법에 대한 로직을 정의해놓은 클래스에 붙이는 어노테이션
@Converter(autoApply = true) 뜻은 해당 변환 클래스에 지정된 타입에 대해서는 모두 해당 변환 클래스의 메소드를 이용해 DB와의 통신에서 값을 변환하겠다는 뜻,
autoApply 기본값인 false는 따로 XML과 같은 설정 파일에 해당 변환 클래스를 사용할 곳에서만 변환한다는
@Converter(autoApply = true)
public class MenuConverter implements AttributeConverter<Menu, String>{
@Override
public String convertToDatabaseColumn(Menu menu) {
...
}
@Override
public Menu convertToEntityAttribute(String menuName) {
...
}
}
Java
복사
•
convertToDatabaseColumn(Menu menu): enum을 DB에 어떤값으로 넣을것인지 정의
•
convertToEntityAttribute(String menuName): DB에서 읽힌 값에 따라 어떻게 enum랑 매칭 시킬것인지 정의