728x90
- 컨버터(converter)를 사용하면 엔티티의 데이터를 변환해서 데이터베이스에 저장할 수 있다.
- 자바의 boolean 타입은 방언에 따라 다르지만 데이터베이스에 저장될 때 0 또는 1인 숫자로 저장된다.
- 그런데 데이터베이스에 숫자 대신 문자 Y 또는 N으로 저장하고 싶다면 컨버터를 사용하면 된다.
CREATE TABLE MEMBER (
ID VARCHAR(255) NOT NULL,
USERNAME VARCHAR(255),
VIP VARCHAR(1) NOT NULL, -- 변환할 컬럼
PRIMARY KEY(ID)
)
매핑할 테이블을 보면 문자 Y, N을 입력하려고 VIP 컬럼을 VARCHAR(1)로 지정했다.
@Entity
public class Member {
@Id
private String id;
private String username;
@Convert(converter=BooleanToYNConverter.class)
private boolean vip;
//Getter, Setter
...
}
- 위의 회원 엔티티의 vip 필드는 boolean 타입이다.
- @Convert를 적용해서 데이터베이스에 저장되기 직전에 BooleanToYNConverter 컨버터가 동작하도록 했다.
@Converter
public class BooleanToYNConverter implements AttributeConverter<Boolean, String> {
@Override
public String converterToDatabaseColumn(Boolean attribute) {
return (attribute != null && attribute) ? "Y" : "N";
}
@Override
public Boolean convertToEntityAttribute(String dbData) {
return "Y".equals(dbData);
}
}
- 컨버터 클래스는 @Converter 어노테이션을 사용하고 AttributeConverter 인터페이스를 구현해야 한다.
- 제네릭에 현재 타입과 변환할 타입을 지정해야한다.
- 여기서는 <Boolean, String>을 지정해서 Boolean 타입을 String 타입으로 변환한다.
public interface AttributeConverter<X, Y> {
public Y convertToDatabaseColumn (X attribute);
public X converterToEntityAttribute (Y dbData);
}
AttributeConverter 인터페이스에는 구현해야 할 다음 두 메소드가 있다.
- converterDatabaseColumn() : 엔티티의 데이터를 데이터베이스 컬럼에 저장할 데이터로 변환한다.
- convertToEntityAttribute() : 데이터베이스에서 조회한 컬럼 데이터를 엔티티의 데이터로 변환한다.
이제 회원 엔티티를 저장하면 데이터베이스의 VIP 컬럼에는 Y 또는 N이 저장된다.
출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 : 김영한)
728x90
'JPA' 카테고리의 다른 글
JPA 낙관적 락(부제 - OPTIMISTIC) (0) | 2022.06.22 |
---|---|
@CreatedBy, @ModifiedBy 사용하기 (0) | 2022.06.21 |
Spring data JPA 쿼리 생성 기능 (0) | 2022.06.19 |
벌크 연산(부제 - DB에 직접 쿼리) (0) | 2022.06.18 |
컬렉션 엔티티 조회 + 페이징을 함께 해결 (feat. default_batch_fetch_size) (0) | 2022.06.16 |