Home
Java
JPA Converter Annotation (Boolean, ENUM)
devfoxstar
devfoxstar
February 25, 2023
1 min

Table Of Contents

01
@Converter
02
구현 방식
03
예제 - Boolean
04
예제 - ENUM

@Converter


@ConverterEntityDB 사이에 일관된 데이터 변환을 목적으로 합니다.
그래서 데이터를 입력하거나 출력할 때 Converter를 거치게 됩니다.

일관된 데이터 제공이 중요한 이유는 뭘까요?
개발자 혹은 라이브러리에 따라 같은 데이터를 다르게 변환하는 경우가 자주 있기 때문입니다.

정합성이 떨어지는 데이터는 데이터로서 가치가 없습니다.

구현 방식


EntityConverter를 지정하면, AttributeConverter에 지정된 함수로 데이터가 자동 변환됩니다.
Boolean, ENUM 등 다양한 데이터 타입에 사용할 수 있습니다.

예제 - Boolean


DB에는 String 값으로 입력하고, Entity에는 Boolean 값으로 출력하는 예제입니다.

@Converter
class BooleanConverter implements AttributeConverter<Boolean, String> {
    
    @Override
    public String convertToDatabaseColumn(Boolean attribute) {
        return (attribute != null && attribute) ? "Y" : "N";
    }

    @Override
    public Boolean convertToEntityAttribute(String dbData) {
        return "Y".equals(dbData)
    }

}

@Entity
class User {
    
    @Id
    private String user_id;

    @Convert(converter=BooleanConverter.class)
    private use_flag;

}

예제 - ENUM


미리 정의된 ENUM 값으로 데이터를 변환해서 입출력합니다.

enum UserType {
    NORMAL("1", "정상"),
    WITHDRAW("2", "탈퇴"),
    BLOCK("3", "차단")

    private String legacyCode;
    private String description;

    UserType(String legacyCode, String description) {
        this.legacyCode = legacyCode;
        this.description = description;
    }
}

@Converter
class UserTypeConverter implements AttributeConverter<UserType, String> {

    @Override
    public String convertToDatabaseColumn(UserType attribute) {
        return attribute.getLegacyCode();
    }

    @Override
    public UserType convertToEntityAttribute(String dbData) {
        return EnumSet.allOf(UserType.class).stream()
            .filter(e -> e.getLegacyCode().equals(dbData))
            .findAny()
            .orElseThrow()-> new NoSuchElementException();
    }

}

@Entity
class User {
    @Id
    private String user_id;

    @Convert(converter=UserTypeConverter.class)
    private UserType user_type;
}

Tags

#Java#JPA#Converter#Annotation

Related Posts

Java - Record class (불변 데이터 객체 만들기)
June 11, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media