JPA 사용시 컬럼값에 Enum을 자동 매핑하기 위한 방법을 소개한다.
Enum에서 상속받는 interface 구현
public interface BaseEnumCode<T> {
T getValue();
}
Enum 클래스 생성
@Getter
@AllArgsConstructor
public enum ContentSourceEnum implements BaseEnumCode<String> {
news("뉴스", "news"),
videoNews("포토/동영상 뉴스", "videoNews"),
normal("일반", "normal");
private String name;
private String value;
}
Code 값을 Enum으로 자동 매핑해주는 클래스 생성
public abstract class AbstractBaseEnumConverter<X extends Enum<X> & BaseEnumCode<Y>, Y> implements AttributeConverter<X, Y> {
protected abstract X[] getValueList();
@Override
public Y convertToDatabaseColumn(X attribute) {
return attribute.getValue();
}
@Override
public X convertToEntityAttribute(Y dbData) {
return Arrays.stream(getValueList())
.filter(e -> e.getValue().equals(dbData))
.findFirst()
.orElse(null);
}
}
Entity 컬럼에 선언할 Converer 클래스 생성
public class ContentSourceEnumConverter extends AbstractBaseEnumConverter<ContentSourceEnum, String>{
@Override
protected ContentSourceEnum[] getValueList() {
return ContentSourceEnum.values();
}
}
Entity 컬럼 Enum 자동매핑 설정
@Convert(converter = ContentSourceEnumConverter.class)
@Column(name = "source")
private ContentSourceEnum source;
'JPA > JPA' 카테고리의 다른 글
JPQL mysql now() 매핑 (0) | 2021.03.15 |
---|---|
JPA TOP1 사용법 (0) | 2021.03.15 |
조건문 매칭 (0) | 2020.12.01 |
insert, update, delete 주의 사항(쿼리 실행 순서) (0) | 2020.11.11 |
SAVE 메서드 주의 사항 (0) | 2020.06.09 |