[Spring Boot] Attribute Converter
DB의 코스성 데이터를 @Enumerated로 관리하면 몇가지 문제가 있다.
1. ORDINAL 설정은 enum 추가시 이전 값 때문에 예기치 못한 문제가 발생할 수 있다.
2. STRING 설정은 문자열 저장으로 DB 공간 낭비가 야기 될수 있다.
그래서 개인적으로는 converter를 사용할 것을 권장한다.
동작은 아래 그림과 같이 엔터티와 DB 사이에서 동작한다.
converter 구현은 AttributeConverter 인터페이스를 구현하면 된다.
말보다 코드로...
위와 같이 convertToDatabaseColumn 과 convertToEntityAttribute 인터페이스를 override 하면 된다. 메소드의 이름만 봐도 멀 의미하는지 알수 있다.
사용은 아래와 같이 @Convert 태그로 converter class를 지정해 주면 된다.
1. ORDINAL 설정은 enum 추가시 이전 값 때문에 예기치 못한 문제가 발생할 수 있다.
2. STRING 설정은 문자열 저장으로 DB 공간 낭비가 야기 될수 있다.
그래서 개인적으로는 converter를 사용할 것을 권장한다.
동작은 아래 그림과 같이 엔터티와 DB 사이에서 동작한다.
converter 구현은 AttributeConverter 인터페이스를 구현하면 된다.
말보다 코드로...
@Converter
public class RoleConverter implements AttributeConverter<String, Integer> {
@Override
public Integer convertToDatabaseColumn(String s) {
if ("admin".equals(s)) {
return 1;
} else if ("guest".equals(s)) {
return 2;
}
return 0;
}
@Override
public String convertToEntityAttribute(Integer code) {
if (1 == code) {
return "admin";
} else if (2 == code) {
return "guest";
}
return "뭐지?";
}
}
위와 같이 convertToDatabaseColumn 과 convertToEntityAttribute 인터페이스를 override 하면 된다. 메소드의 이름만 봐도 멀 의미하는지 알수 있다.
사용은 아래와 같이 @Convert 태그로 converter class를 지정해 주면 된다.
@Entity
class User {
@Id
private int id;
@Convert(converter = RoleConverter.class)
private String role;
}
댓글
댓글 쓰기