From cbfb0f7a1caaea9ab06ab0a661cf7e4a5a4f8366 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Mon, 6 Jun 2022 10:37:34 -0500 Subject: [PATCH] Alter JSR-310 converters to use java.sql.Timestamp instead of java.util.Date. Closes #2077. --- .../convert/threeten/Jsr310JpaConverters.java | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/convert/threeten/Jsr310JpaConverters.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/convert/threeten/Jsr310JpaConverters.java index ad8ce3f0b..78d7d403d 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/convert/threeten/Jsr310JpaConverters.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/convert/threeten/Jsr310JpaConverters.java @@ -15,6 +15,10 @@ */ package org.springframework.data.jpa.convert.threeten; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +import java.sql.Timestamp; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; @@ -22,19 +26,17 @@ import java.time.LocalTime; import java.time.ZoneId; import java.util.Date; -import jakarta.persistence.AttributeConverter; -import jakarta.persistence.Converter; - -import org.springframework.data.convert.Jsr310Converters.DateToInstantConverter; import org.springframework.data.convert.Jsr310Converters.DateToLocalDateConverter; import org.springframework.data.convert.Jsr310Converters.DateToLocalDateTimeConverter; import org.springframework.data.convert.Jsr310Converters.DateToLocalTimeConverter; -import org.springframework.data.convert.Jsr310Converters.InstantToDateConverter; import org.springframework.data.convert.Jsr310Converters.LocalDateTimeToDateConverter; import org.springframework.data.convert.Jsr310Converters.LocalDateToDateConverter; import org.springframework.data.convert.Jsr310Converters.LocalTimeToDateConverter; import org.springframework.data.convert.Jsr310Converters.StringToZoneIdConverter; import org.springframework.data.convert.Jsr310Converters.ZoneIdToStringConverter; +import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.convert.WritingConverter; +import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; @@ -46,6 +48,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; * * @author Oliver Gierke * @author Kevin Peters + * @author Greg Turnquist */ public class Jsr310JpaConverters { @@ -98,18 +101,18 @@ public class Jsr310JpaConverters { } @Converter(autoApply = true) - public static class InstantConverter implements AttributeConverter { + public static class InstantConverter implements AttributeConverter { @Nullable @Override - public Date convertToDatabaseColumn(Instant instant) { - return instant == null ? null : InstantToDateConverter.INSTANCE.convert(instant); + public Timestamp convertToDatabaseColumn(Instant instant) { + return instant == null ? null : InstantToTimestampConverter.INSTANCE.convert(instant); } @Nullable @Override - public Instant convertToEntityAttribute(Date date) { - return date == null ? null : DateToInstantConverter.INSTANCE.convert(date); + public Instant convertToEntityAttribute(Timestamp timestamp) { + return timestamp == null ? null : TimestampToInstantConverter.INSTANCE.convert(timestamp); } } @@ -128,4 +131,28 @@ public class Jsr310JpaConverters { return zoneId == null ? null : StringToZoneIdConverter.INSTANCE.convert(zoneId); } } + + @ReadingConverter + enum TimestampToInstantConverter implements org.springframework.core.convert.converter.Converter { + + INSTANCE; + + @NonNull + @Override + public Instant convert(Timestamp source) { + return source.toInstant(); + } + } + + @WritingConverter + enum InstantToTimestampConverter implements org.springframework.core.convert.converter.Converter { + + INSTANCE; + + @NonNull + @Override + public Timestamp convert(Instant source) { + return Timestamp.from(source); + } + } }