JPA
@Converter를 이용해 데이터를 변환해서 저장하고 가져오기
Beekei
2022. 1. 20. 16:12
반응형
컨버터를 사용하면 엔티티의 데이터를 변환해서 데이터베이스에 저장할 수 있다.
예를 들어 회원의 VIP여부를 데이터베이스에는 "Y", "N"으로 저장하고 엔티티에서는 boolean 타입으로 변환해서 사용할 수 있다.
@Entity
public class Member {
...
@Convert(converter = VipConverter.class)
private boolean isVip;
}
@Converter
public class VipConverter 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);
}
}
Converter 클래스에 AttributeConverter<엔티티 컬럼 타입, 데이터베이스 컬럼 타입>을 상속받고
convertToDatabaseColumn, convertToEntityAttribute 매서드를 구현하면 된다.
클래스 레벨에도 설정이 가능하다.
클래스 레벨에 설정하려면 attributeName 속성을 꼭 설정해야 한다.
@Entity
@Convert(converter = VipConverter.class, attributeName = "isVip")
public class Member {
...
private boolean isVip;
}
컨버터는 글로벌 설정도 할 수 있다.
@Converter(autoApply = true)
public class VipConverter 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);
}
}
@Converter 어노테이션의 autoApply 속성을 true로 설정하면 엔티티의 모든 Boolean 타입은 컨버터가 적용된다.
disableConversion 속성을 true로 설정하면 글로벌 컨버터나 상속받은 컨터버를 사용하지 않을 수 있다.
반응형