JPAでLocalDateとLocalDateTimeを利用する

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をエンティティに利用できるようになります。