- 엔티티의 데이터를 데이터베이스에 저장할 때 변환하는 역할을 수행한다.
- 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 }
@Convert
로BooleanToYNConverter
가 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 |