JPAでLocalDateTimeまたはLocalDateを利用するためには、以下のコンバータークラスを作成するだけで利用可能となります。(autoApply = true
を設定することでエンティティのフィールドに設定などは必要ありません。)
java.sql.DateとLocalDateの変換
java.sql.DateとLocalDateの変換処理を行うためのコンバーターを作成します。LocalDateはデータベースのDate型に対応します。
import javax.persistence.AttributeConverter; import javax.persistence.Converter; import java.time.LocalDate; @Converter(autoApply = true) public class LocalDateConverter implements AttributeConverter<LocalDate, java.sql.Date> { @Override public java.sql.Date convertToDatabaseColumn(LocalDate localDateTime) { return (localDateTime == null ? null : java.sql.Date.valueOf(localDateTime)); } @Override public LocalDate convertToEntityAttribute(java.sql.Date date) { return (date == null ? null : date.toLocalDate()); } }
java.sql.TimeとLocalDateTimeの変換
java.sql.TimeとLocalDateTimeの変換処理を行うためのコンバーターを作成します。LocalDateTimeはデータベースのTimestamp型に対応します。
@Converter(autoApply = true) public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, java.sql.Timestamp> { @Override public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime localDateTime) { return (localDateTime == null ? null : java.sql.Timestamp.valueOf(localDateTime)); } @Override public LocalDateTime convertToEntityAttribute(java.sql.Timestamp timestamp) { return (timestamp == null ? null : timestamp.toLocalDateTime()); } }
これでLocalDateとLocalDateTimeをエンティティに利用できるようになります。