@Convert
는 엔터프라이즈 APP에서 엔티티의 속성을 DB에 저장할 때 Converter(변환기)
를 통해서 바꾼다는 것입니다.
@Convert(converter = LocalDateAttributeConverter.class) // Converter 지정
private LocalDateTime createdDate;
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime attribute) {
return (attribute == null ? null : Timestamp.valueOf(attribute));
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp dbData) {
return (dbData == null ? null : dbData.toLocalDateTime());
}
}
LocalDateTimeAttributeConverter은 AttributeConverter를 구현하는 구현체
입니다. 2개의 메소드를 오버라이드하고 있습니다.
1번째 메소드 convertToDatabaseColumn은 말 그대로 LocalDateTime을 Timestamp로 변환하는 역할입니다.
2번째 메소드 convertToENtityAttributes는 Timestamp를 LocalDateTime으로 변환하는 역할입니다.
AttributeConverter
의 정의를 보면
/**
* A class that implements this interface can be used to convert
* entity attribute state into database column representation
* and back again.
* Note that the X and Y types may be the same Java type.
*
* @param <X> the type of the entity attribute
* @param <Y> the type of the database column
*/
public interface AttributeConverter<X,Y> { // X는 엔티티 타입, Y는 DB 타입
/**
* Converts the value stored in the entity attribute into the
* data representation to be stored in the database.
*
* @param attribute the entity attribute value to be converted
* @return the converted data to be stored in the database
* column
*/
public Y convertToDatabaseColumn (X attribute);
/**
* Converts the data stored in the database column into the
* value to be stored in the entity attribute.
* Note that it is the responsibility of the converter writer to
* specify the correct <code>dbData</code> type for the corresponding
* column for use by the JDBC driver: i.e., persistence providers are
* not expected to do such type conversion.
*
* @param dbData the data from the database column to be
* converted
* @return the converted value to be stored in the entity
* attribute
*/
public X convertToEntityAttribute (Y dbData);
}
X에는 Entity의 타입을 의미하고 Y는 DB의 타입을 의미합니다. 따라서 AttributeConverter<LocalDateTime, Timestamp>
에서 LocalDateTime은 Java에서의 Entity 타입의 속성, Timestamp는 DB에서의 속성 타입을 의미합니다.
@Convert
는 엔터프라이즈 APP에서 엔티티의 속성을 데이터베이스에 저장할 때 Converter를 통해서 변환 후, 저장하는 변환기를 지정하는 어노테이션입니다. 물론 데이터베이스에 저장과 가져오는 것이 전부 가능합니다.