15
15
*/
16
16
package org .springframework .data .jpa .convert .threeten ;
17
17
18
+ import jakarta .persistence .AttributeConverter ;
19
+ import jakarta .persistence .Converter ;
20
+
21
+ import java .sql .Timestamp ;
18
22
import java .time .Instant ;
19
23
import java .time .LocalDate ;
20
24
import java .time .LocalDateTime ;
21
25
import java .time .LocalTime ;
22
26
import java .time .ZoneId ;
23
27
import java .util .Date ;
24
28
25
- import jakarta .persistence .AttributeConverter ;
26
- import jakarta .persistence .Converter ;
27
-
28
- import org .springframework .data .convert .Jsr310Converters .DateToInstantConverter ;
29
29
import org .springframework .data .convert .Jsr310Converters .DateToLocalDateConverter ;
30
30
import org .springframework .data .convert .Jsr310Converters .DateToLocalDateTimeConverter ;
31
31
import org .springframework .data .convert .Jsr310Converters .DateToLocalTimeConverter ;
32
- import org .springframework .data .convert .Jsr310Converters .InstantToDateConverter ;
33
32
import org .springframework .data .convert .Jsr310Converters .LocalDateTimeToDateConverter ;
34
33
import org .springframework .data .convert .Jsr310Converters .LocalDateToDateConverter ;
35
34
import org .springframework .data .convert .Jsr310Converters .LocalTimeToDateConverter ;
36
35
import org .springframework .data .convert .Jsr310Converters .StringToZoneIdConverter ;
37
36
import 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 ;
38
40
import org .springframework .lang .Nullable ;
39
41
import org .springframework .orm .jpa .LocalContainerEntityManagerFactoryBean ;
40
42
46
48
*
47
49
* @author Oliver Gierke
48
50
* @author Kevin Peters
51
+ * @author Greg Turnquist
49
52
*/
50
53
public class Jsr310JpaConverters {
51
54
@@ -98,18 +101,18 @@ public LocalDateTime convertToEntityAttribute(Date date) {
98
101
}
99
102
100
103
@ Converter (autoApply = true )
101
- public static class InstantConverter implements AttributeConverter <Instant , Date > {
104
+ public static class InstantConverter implements AttributeConverter <Instant , Timestamp > {
102
105
103
106
@ Nullable
104
107
@ 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 );
107
110
}
108
111
109
112
@ Nullable
110
113
@ 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 );
113
116
}
114
117
}
115
118
@@ -128,4 +131,28 @@ public ZoneId convertToEntityAttribute(String zoneId) {
128
131
return zoneId == null ? null : StringToZoneIdConverter .INSTANCE .convert (zoneId );
129
132
}
130
133
}
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
+ }
131
158
}
0 commit comments