JPA/JPA

JPA Enum Mapping

lovineff 2021. 3. 15. 12:23

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