1515 */
1616package org .springframework .data .jpa .convert .threeten ;
1717
18+ import jakarta .persistence .AttributeConverter ;
19+ import jakarta .persistence .Converter ;
20+
21+ import java .sql .Timestamp ;
1822import java .time .Instant ;
1923import java .time .LocalDate ;
2024import java .time .LocalDateTime ;
2125import java .time .LocalTime ;
2226import java .time .ZoneId ;
2327import java .util .Date ;
2428
25- import jakarta .persistence .AttributeConverter ;
26- import jakarta .persistence .Converter ;
27-
28- import org .springframework .data .convert .Jsr310Converters .DateToInstantConverter ;
2929import org .springframework .data .convert .Jsr310Converters .DateToLocalDateConverter ;
3030import org .springframework .data .convert .Jsr310Converters .DateToLocalDateTimeConverter ;
3131import org .springframework .data .convert .Jsr310Converters .DateToLocalTimeConverter ;
32- import org .springframework .data .convert .Jsr310Converters .InstantToDateConverter ;
3332import org .springframework .data .convert .Jsr310Converters .LocalDateTimeToDateConverter ;
3433import org .springframework .data .convert .Jsr310Converters .LocalDateToDateConverter ;
3534import org .springframework .data .convert .Jsr310Converters .LocalTimeToDateConverter ;
3635import org .springframework .data .convert .Jsr310Converters .StringToZoneIdConverter ;
3736import org .springframework .data .convert .Jsr310Converters .ZoneIdToStringConverter ;
37+ import org .springframework .data .convert .ReadingConverter ;
38+ import org .springframework .data .convert .WritingConverter ;
39+ import org .springframework .lang .NonNull ;
3840import org .springframework .lang .Nullable ;
3941import org .springframework .orm .jpa .LocalContainerEntityManagerFactoryBean ;
4042
4648 *
4749 * @author Oliver Gierke
4850 * @author Kevin Peters
51+ * @author Greg Turnquist
4952 */
5053public class Jsr310JpaConverters {
5154
@@ -98,18 +101,18 @@ public LocalDateTime convertToEntityAttribute(Date date) {
98101 }
99102
100103 @ Converter (autoApply = true )
101- public static class InstantConverter implements AttributeConverter <Instant , Date > {
104+ public static class InstantConverter implements AttributeConverter <Instant , Timestamp > {
102105
103106 @ Nullable
104107 @ Override
105- public Date convertToDatabaseColumn (Instant instant ) {
106- return instant == null ? null : InstantToDateConverter .INSTANCE .convert (instant );
108+ public Timestamp convertToDatabaseColumn (Instant instant ) {
109+ return instant == null ? null : InstantToTimestampConverter .INSTANCE .convert (instant );
107110 }
108111
109112 @ Nullable
110113 @ Override
111- public Instant convertToEntityAttribute (Date date ) {
112- return date == null ? null : DateToInstantConverter .INSTANCE .convert (date );
114+ public Instant convertToEntityAttribute (Timestamp timestamp ) {
115+ return timestamp == null ? null : TimestampToInstantConverter .INSTANCE .convert (timestamp );
113116 }
114117 }
115118
@@ -128,4 +131,28 @@ public ZoneId convertToEntityAttribute(String zoneId) {
128131 return zoneId == null ? null : StringToZoneIdConverter .INSTANCE .convert (zoneId );
129132 }
130133 }
134+
135+ @ ReadingConverter
136+ enum TimestampToInstantConverter implements org .springframework .core .convert .converter .Converter <Timestamp , Instant > {
137+
138+ INSTANCE ;
139+
140+ @ NonNull
141+ @ Override
142+ public Instant convert (Timestamp source ) {
143+ return source .toInstant ();
144+ }
145+ }
146+
147+ @ WritingConverter
148+ enum InstantToTimestampConverter implements org .springframework .core .convert .converter .Converter <Instant , Timestamp > {
149+
150+ INSTANCE ;
151+
152+ @ NonNull
153+ @ Override
154+ public Timestamp convert (Instant source ) {
155+ return Timestamp .from (source );
156+ }
157+ }
131158}
0 commit comments