Skip to content

Commit aa10273

Browse files
committed
HHH-18532 Fixed two things:
- reordered matching in unwrap methods to push java.util.Date after java.sql.{Date,Time,Timestamp} - use new java.sql.{Date,Time}(instant.toEpochMilli()) instead of java.sql.{Date,Time}.from(instant); later method is not subclasses so it is always returning instance of java.util.Date
1 parent 7473927 commit aa10273

File tree

7 files changed

+38
-34
lines changed

7 files changed

+38
-34
lines changed

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcDateJavaType.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
126126
return unwrapSqlDate( value );
127127
}
128128

129+
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
130+
return new java.sql.Timestamp( unwrapDateEpoch( value ) );
131+
}
132+
133+
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
134+
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Date` as `java.sql.Time`" );
135+
}
136+
129137
if ( java.util.Date.class.isAssignableFrom( type ) ) {
130138
return value;
131139
}
@@ -144,14 +152,6 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
144152
return cal;
145153
}
146154

147-
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
148-
return new java.sql.Timestamp( unwrapDateEpoch( value ) );
149-
}
150-
151-
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
152-
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Date` as `java.sql.Time`" );
153-
}
154-
155155
throw unknownUnwrap( type );
156156
}
157157

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimeJavaType.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,14 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
151151
: new Time( value.getTime() % 86_400_000 );
152152
}
153153

154+
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
155+
return new java.sql.Timestamp( value.getTime() );
156+
}
157+
158+
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
159+
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Time` as `java.sql.Date`" );
160+
}
161+
154162
if ( Date.class.isAssignableFrom( type ) ) {
155163
return value;
156164
}
@@ -169,14 +177,6 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
169177
return cal;
170178
}
171179

172-
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
173-
return new java.sql.Timestamp( value.getTime() );
174-
}
175-
176-
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
177-
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Time` as `java.sql.Date`" );
178-
}
179-
180180
throw unknownUnwrap( type );
181181
}
182182

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JdbcTimestampJavaType.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,18 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
130130
: new Timestamp( value.getTime() );
131131
}
132132

133+
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
134+
return value instanceof java.sql.Date
135+
? ( java.sql.Date ) value
136+
: new java.sql.Date( value.getTime() );
137+
}
138+
139+
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
140+
return value instanceof java.sql.Time
141+
? ( java.sql.Time ) value
142+
: new java.sql.Time( value.getTime() );
143+
}
144+
133145
if ( Date.class.isAssignableFrom( type ) ) {
134146
return value;
135147
}
@@ -149,18 +161,6 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
149161
return value.getTime();
150162
}
151163

152-
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
153-
return value instanceof java.sql.Date
154-
? ( java.sql.Date ) value
155-
: new java.sql.Date( value.getTime() );
156-
}
157-
158-
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
159-
return value instanceof java.sql.Time
160-
? ( java.sql.Time ) value
161-
: new java.sql.Time( value.getTime() % 86_400_000 );
162-
}
163-
164164
throw unknownUnwrap( type );
165165
}
166166

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/LocalDateTimeJavaType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ public <X> X unwrap(LocalDateTime value, Class<X> type, WrapperOptions options)
9999

100100
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
101101
Instant instant = value.atZone( ZoneId.systemDefault() ).toInstant();
102-
return (X) java.sql.Date.from( instant );
102+
return (X) new java.sql.Date( instant.toEpochMilli() );
103103
}
104104

105105
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
106106
Instant instant = value.atZone( ZoneId.systemDefault() ).toInstant();
107-
return (X) java.sql.Time.from( instant );
107+
return (X) new java.sql.Time( instant.toEpochMilli() );
108108
}
109109

110110
if ( Date.class.isAssignableFrom( type ) ) {

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/OffsetDateTimeJavaType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,11 @@ public <X> X unwrap(OffsetDateTime offsetDateTime, Class<X> type, WrapperOptions
155155
}
156156

157157
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
158-
return (X) java.sql.Date.from( offsetDateTime.toInstant() );
158+
return (X) new java.sql.Date( offsetDateTime.toInstant().toEpochMilli() );
159159
}
160160

161161
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
162-
return (X) java.sql.Time.from( offsetDateTime.toInstant() );
162+
return (X) new java.sql.Time( offsetDateTime.toInstant().toEpochMilli() );
163163
}
164164

165165
if ( Date.class.isAssignableFrom( type ) ) {

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/OffsetTimeJavaType.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ public <X> X unwrap(OffsetTime offsetTime, Class<X> type, WrapperOptions options
140140
return (X) Long.valueOf( instant.toEpochMilli() );
141141
}
142142

143+
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
144+
throw new IllegalArgumentException( "Illegal attempt to treat `java.time.OffsetTime` as `java.sql.Date`" );
145+
}
146+
143147
if ( Date.class.isAssignableFrom( type ) ) {
144148
return (X) Date.from( instant );
145149
}

hibernate-core/src/main/java/org/hibernate/type/descriptor/java/ZonedDateTimeJavaType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,11 @@ public <X> X unwrap(ZonedDateTime zonedDateTime, Class<X> type, WrapperOptions o
122122
}
123123

124124
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
125-
return (X) java.sql.Date.from( zonedDateTime.toInstant() );
125+
return (X) new java.sql.Date( zonedDateTime.toInstant().toEpochMilli() );
126126
}
127127

128128
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
129-
return (X) java.sql.Time.from( zonedDateTime.toInstant() );
129+
return (X) new java.sql.Time( zonedDateTime.toInstant().toEpochMilli() );
130130
}
131131

132132
if ( Date.class.isAssignableFrom( type ) ) {

0 commit comments

Comments
 (0)