[Jpa] @Convertor 사용

  • 엔티티의 데이터를 데이터베이스에 저장할 때 변환하는 역할을 수행한다.
  • Java 의 boolean 타입을 데이터베이스에 문자열 ‘Y’ 혹은 ‘N’ 으로 저장할때.. 사용한다고 함.

분석

  • DB 테이블 생성
    CREATE TABLE MEMBER (
        ID VARCHAR(255) NOT NULL,
        USERNAME VARCHAR(255),
        VIP VARCHAR(1) NOT NULL,
        PRIMARY KEY (ID)
    )
  • 회원 엔티티
    @Entity
    public class Member {
        @Id
        private String id;
        private String username;
        @Convert(converter=BooleanToYNConverter.class)
        private boolean vip;
        // Getter, Setter
    }
  • @ConvertBooleanToYNConverter 가 boolean 타입의 vip 필드에 매핑
  • 컨버터 로직
    @Converter
    public class BooleanToYNConverter 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);
        }
    }
  • AttributeConverter 인터페이스
    public interface AttributeConverter<X, Y> {
        Y convertToDatabaseColumn(X attribute);
        X convertToEntityAttribute(Y dbData);
    }
  • 클래스 레벨에서 컨버터 설정하는 방법
    @Entity
    @Convert(converter=BooleanToYNConverter.class, attributeName="vip")
    public class Member {
        @Id
        private String id;
        private String username;
        private boolean vip;
    }

모든 Boolean 타입에 컨버터를 적용하려면

@Converter (autoApply = true)
public class BooleanToYNConverter implements
AttributeConverter<Boolean, String>
  • @Converter (autoApply = true) 를 설정하면 된다.


Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA] 프록시의 동등성 비교법  (0) 2023.11.19
[JPA] 그 유명한 N+1 문제  (0) 2023.11.19
[Jpa] 트랜잭션 범위와 영속성 컨텍스트  (0) 2023.11.17
[Jpa] 준영속과 지연 로딩  (0) 2023.11.17
[Jpa] 준영속과 변경  (0) 2023.11.17