Skip to content

Commit 32a646a

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 b19440c commit 32a646a

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

+8-8
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
123123
return unwrapSqlDate( value );
124124
}
125125

126+
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
127+
return new java.sql.Timestamp( unwrapDateEpoch( value ) );
128+
}
129+
130+
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
131+
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Date` as `java.sql.Time`" );
132+
}
133+
126134
if ( java.util.Date.class.isAssignableFrom( type ) ) {
127135
return value;
128136
}
@@ -141,14 +149,6 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
141149
return cal;
142150
}
143151

144-
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
145-
return new java.sql.Timestamp( unwrapDateEpoch( value ) );
146-
}
147-
148-
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
149-
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Date` as `java.sql.Time`" );
150-
}
151-
152152
throw unknownUnwrap( type );
153153
}
154154

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

+8-8
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,14 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
140140
: new Time( value.getTime() % 86_400_000 );
141141
}
142142

143+
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
144+
return new java.sql.Timestamp( value.getTime() );
145+
}
146+
147+
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
148+
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Time` as `java.sql.Date`" );
149+
}
150+
143151
if ( Date.class.isAssignableFrom( type ) ) {
144152
return value;
145153
}
@@ -158,14 +166,6 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
158166
return cal;
159167
}
160168

161-
if ( java.sql.Timestamp.class.isAssignableFrom( type ) ) {
162-
return new java.sql.Timestamp( value.getTime() );
163-
}
164-
165-
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
166-
throw new IllegalArgumentException( "Illegal attempt to treat `java.sql.Time` as `java.sql.Date`" );
167-
}
168-
169169
throw unknownUnwrap( type );
170170
}
171171

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

+12-12
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,18 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
128128
: new Timestamp( value.getTime() );
129129
}
130130

131+
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
132+
return value instanceof java.sql.Date
133+
? ( java.sql.Date ) value
134+
: new java.sql.Date( value.getTime() );
135+
}
136+
137+
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
138+
return value instanceof java.sql.Time
139+
? ( java.sql.Time ) value
140+
: new java.sql.Time( value.getTime() );
141+
}
142+
131143
if ( Date.class.isAssignableFrom( type ) ) {
132144
return value;
133145
}
@@ -147,18 +159,6 @@ public Object unwrap(Date value, Class type, WrapperOptions options) {
147159
return value.getTime();
148160
}
149161

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

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,12 @@ public <X> X unwrap(LocalDateTime value, Class<X> type, WrapperOptions options)
9797

9898
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
9999
Instant instant = value.atZone( ZoneId.systemDefault() ).toInstant();
100-
return (X) java.sql.Date.from( instant );
100+
return (X) new java.sql.Date( instant.toEpochMilli() );
101101
}
102102

103103
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
104104
Instant instant = value.atZone( ZoneId.systemDefault() ).toInstant();
105-
return (X) java.sql.Time.from( instant );
105+
return (X) new java.sql.Time( instant.toEpochMilli() );
106106
}
107107

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

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ public <X> X unwrap(OffsetDateTime offsetDateTime, Class<X> type, WrapperOptions
153153
}
154154

155155
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
156-
return (X) java.sql.Date.from( offsetDateTime.toInstant() );
156+
return (X) new java.sql.Date( offsetDateTime.toInstant().toEpochMilli() );
157157
}
158158

159159
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
160-
return (X) java.sql.Time.from( offsetDateTime.toInstant() );
160+
return (X) new java.sql.Time( offsetDateTime.toInstant().toEpochMilli() );
161161
}
162162

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

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

+4
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ public <X> X unwrap(OffsetTime offsetTime, Class<X> type, WrapperOptions options
138138
return (X) Long.valueOf( instant.toEpochMilli() );
139139
}
140140

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

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ public <X> X unwrap(ZonedDateTime zonedDateTime, Class<X> type, WrapperOptions o
120120
}
121121

122122
if ( java.sql.Date.class.isAssignableFrom( type ) ) {
123-
return (X) java.sql.Date.from( zonedDateTime.toInstant() );
123+
return (X) new java.sql.Date( zonedDateTime.toInstant().toEpochMilli() );
124124
}
125125

126126
if ( java.sql.Time.class.isAssignableFrom( type ) ) {
127-
return (X) java.sql.Time.from( zonedDateTime.toInstant() );
127+
return (X) new java.sql.Time( zonedDateTime.toInstant().toEpochMilli() );
128128
}
129129

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

0 commit comments

Comments
 (0)