반응형
어떤 경우 사용하나?
- 두 개 이상에 프로퍼티를 한 개 컬럼에 매핑해야 할때 사용한다.
- DB 컬럼과 밸류를 양방향으로 변환시켜 준다.
- 이처럼 변환되는 코드를 모델에 구현하지 않고 AttributeConvertor를 사용해서 변환처리를 한다.
- 예를 들어 Length 밸류 객체는 int value와 String unit 필드를 가지고 있을때 DB상에는 value+unit로 저장된다.
AttributeConverter Interface
package javax.persistence;
public interface AttributeConverter<X,Y> {
public Y convertToDatabaseColumn (X attribute); // 밸류 타입을 DB 컬럼 값으로 변환
public X convertToEntityAttribute (Y dbData); // DB 컬럼 값을 밸류 타입으로 변환
}
예시
- AttributeConverter를 구현할 때 AttributeConverter<밸류, DB 컬럼 타입>로 구현받는다.
- @Converter(autoApply = true)로 설정하면 모든 밸류 타입의 프로피터에 적용된다. (기본값 false)
@Converter(autoApply = true)
public class MoneyConverter implements AttributeConverter<Money, Integer> {
@Override
public Integer convertToDatabaseColumn(Money money) {
if (money == null)
return null;
else
return money.getValue();
}
@Override
public Money convertToDatabaseColumn(Integer value) {
if (value == null)
return null;
else
return new Money(value);
}
}
- @Converter(autoApply = false)인 경우 컬럼에 직접 사용할 컨버터를 지정할 수 있다.
@Converter(autoApply = false)
public class MoneyConverter implements AttributeConverter<Money, Integer> {
...
}
public class Order {
...
@Column(name = "total_amounts")
@Converter(converter = MoneyConverter.class)
private Money totalAmounts;
...
}
반응형
'DDD' 카테고리의 다른 글
애그리거트(Aggregate)간에 참조 및 영속성 전파 (0) | 2021.09.15 |
---|---|
DIP(역전 의존 원칙)란? (0) | 2021.09.14 |
@SecondaryTable을 이용한 밸류 매핑 설정 (0) | 2021.09.14 |
엔티티(Entity)와 밸류(Value)란? (0) | 2021.09.14 |
BOUNDED CONTEXT 간 통합 (0) | 2021.09.14 |