Skip to content

Commit 57b8584

Browse files
committed
unbreak the imm_date type and friends
though perhaps we could just remove this functionality
1 parent 1636aac commit 57b8584

File tree

3 files changed

+45
-14
lines changed

3 files changed

+45
-14
lines changed

hibernate-core/src/main/java/org/hibernate/type/BasicTypeReference.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.io.Serializable;
88

9+
import jakarta.persistence.TemporalType;
910
import org.hibernate.query.sqm.SqmBindableType;
1011
import org.hibernate.type.descriptor.converter.spi.BasicValueConverter;
1112

@@ -24,30 +25,41 @@ public final class BasicTypeReference<T> implements BindableType<T>, Serializabl
2425
private final int sqlTypeCode;
2526
private final BasicValueConverter<T, ?> converter;
2627
private final boolean forceImmutable;
28+
private final TemporalType precision;
2729

2830
public BasicTypeReference(String name, Class<? extends T> javaType, int sqlTypeCode) {
29-
this(name, javaType, sqlTypeCode, null);
31+
this( name, javaType, sqlTypeCode, null, null, false );
3032
}
3133

3234
public BasicTypeReference(
3335
String name,
3436
Class<? extends T> javaType,
3537
int sqlTypeCode,
3638
BasicValueConverter<T, ?> converter) {
37-
this( name, javaType, sqlTypeCode, converter, false );
39+
this( name, javaType, sqlTypeCode, null, converter, false );
40+
}
41+
42+
public BasicTypeReference(
43+
String name,
44+
Class<? extends T> javaType,
45+
int sqlTypeCode,
46+
TemporalType precision) {
47+
this( name, javaType, sqlTypeCode, precision, null, false );
3848
}
3949

4050
private BasicTypeReference(
4151
String name,
4252
Class<? extends T> javaType,
4353
int sqlTypeCode,
54+
TemporalType precision,
4455
BasicValueConverter<T, ?> converter,
4556
boolean forceImmutable) {
4657
this.name = name;
4758
//noinspection unchecked
4859
this.javaType = (Class<T>) javaType;
4960
this.sqlTypeCode = sqlTypeCode;
5061
this.converter = converter;
62+
this.precision = precision;
5163
this.forceImmutable = forceImmutable;
5264
}
5365

@@ -73,6 +85,10 @@ public int getSqlTypeCode() {
7385
return converter;
7486
}
7587

88+
public TemporalType getPrecision() {
89+
return precision;
90+
}
91+
7692
public boolean isForceImmutable() {
7793
return forceImmutable;
7894
}
@@ -82,6 +98,7 @@ public BasicTypeReference<T> asImmutable() {
8298
"imm_" + name,
8399
javaType,
84100
sqlTypeCode,
101+
precision,
85102
converter,
86103
true
87104
);

hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.hibernate.type.descriptor.java.BasicPluralJavaType;
1919
import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
2020
import org.hibernate.type.descriptor.java.JavaType;
21+
import org.hibernate.type.descriptor.java.TemporalJavaType;
2122
import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry;
2223
import org.hibernate.type.descriptor.jdbc.ArrayJdbcType;
2324
import org.hibernate.type.descriptor.jdbc.DelegatingJdbcTypeIndicators;
@@ -89,7 +90,10 @@ else if ( !name.equals( typeReference.getName() ) ) {
8990
}
9091

9192
private <T> BasicType<T> createBasicType(String name, BasicTypeReference<T> typeReference) {
92-
final var javaType = getJavaTypeRegistry().resolveDescriptor( typeReference.getJavaType() );
93+
var javaType = getJavaTypeRegistry().resolveDescriptor( typeReference.getJavaType() );
94+
if ( javaType instanceof TemporalJavaType<?> temporalJavaType ) {
95+
javaType = temporalJavaType.resolveTypeForPrecision( typeReference.getPrecision(), typeConfiguration );
96+
}
9397
final var jdbcType = getJdbcTypeRegistry().getDescriptor( typeReference.getSqlTypeCode() );
9498
final var createdType = createBasicType( typeReference, javaType, jdbcType );
9599
typesByName.put( typeReference.getName(), createdType );
@@ -100,13 +104,13 @@ private <T> BasicType<T> createBasicType(String name, BasicTypeReference<T> type
100104
private static <T> BasicType<T> createBasicType(
101105
BasicTypeReference<T> typeReference, JavaType<T> javaType, JdbcType jdbcType) {
102106
final String name = typeReference.getName();
103-
if ( typeReference.getConverter() == null ) {
107+
final var converter = typeReference.getConverter();
108+
if ( converter == null ) {
104109
return typeReference.isForceImmutable()
105110
? new ImmutableNamedBasicTypeImpl<>( javaType, jdbcType, name )
106111
: new NamedBasicTypeImpl<>( javaType, jdbcType, name );
107112
}
108113
else {
109-
final var converter = typeReference.getConverter();
110114
assert javaType == converter.getDomainJavaType();
111115
return typeReference.isForceImmutable()
112116
? new CustomMutabilityConvertedBasicTypeImpl<>( name, jdbcType, converter,

hibernate-core/src/main/java/org/hibernate/type/StandardBasicTypes.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.TimeZone;
2929
import java.util.UUID;
3030

31+
import jakarta.persistence.TemporalType;
3132
import org.hibernate.type.spi.TypeConfiguration;
3233

3334
/**
@@ -493,7 +494,8 @@ private StandardBasicTypes() {
493494
public static final BasicTypeReference<Date> TIME = new BasicTypeReference<>(
494495
"time",
495496
java.util.Date.class,
496-
SqlTypes.TIME
497+
SqlTypes.TIME,
498+
TemporalType.TIME
497499
);
498500

499501
/**
@@ -503,7 +505,8 @@ private StandardBasicTypes() {
503505
public static final BasicTypeReference<Date> DATE = new BasicTypeReference<>(
504506
"date",
505507
java.util.Date.class,
506-
SqlTypes.DATE
508+
SqlTypes.DATE,
509+
TemporalType.DATE
507510
);
508511

509512
/**
@@ -513,7 +516,8 @@ private StandardBasicTypes() {
513516
public static final BasicTypeReference<Date> TIMESTAMP = new BasicTypeReference<>(
514517
"timestamp",
515518
java.util.Date.class,
516-
SqlTypes.TIMESTAMP
519+
SqlTypes.TIMESTAMP,
520+
TemporalType.TIMESTAMP
517521
);
518522

519523
/**
@@ -523,7 +527,8 @@ private StandardBasicTypes() {
523527
public static final BasicTypeReference<java.sql.Time> SQL_TIME = new BasicTypeReference<>(
524528
"sql_time",
525529
java.sql.Time.class,
526-
SqlTypes.TIME
530+
SqlTypes.TIME,
531+
TemporalType.TIME
527532
);
528533

529534
/**
@@ -533,7 +538,8 @@ private StandardBasicTypes() {
533538
public static final BasicTypeReference<java.sql.Date> SQL_DATE = new BasicTypeReference<>(
534539
"sql_date",
535540
java.sql.Date.class,
536-
SqlTypes.DATE
541+
SqlTypes.DATE,
542+
TemporalType.DATE
537543
);
538544

539545
/**
@@ -543,7 +549,8 @@ private StandardBasicTypes() {
543549
public static final BasicTypeReference<java.sql.Timestamp> SQL_TIMESTAMP = new BasicTypeReference<>(
544550
"sql_timestamp",
545551
java.sql.Timestamp.class,
546-
SqlTypes.TIMESTAMP
552+
SqlTypes.TIMESTAMP,
553+
TemporalType.TIMESTAMP
547554
);
548555

549556
/**
@@ -553,7 +560,8 @@ private StandardBasicTypes() {
553560
public static final BasicTypeReference<Calendar> CALENDAR = new BasicTypeReference<>(
554561
"calendar",
555562
Calendar.class,
556-
SqlTypes.TIMESTAMP
563+
SqlTypes.TIMESTAMP,
564+
TemporalType.TIMESTAMP
557565
);
558566

559567
/**
@@ -563,7 +571,8 @@ private StandardBasicTypes() {
563571
public static final BasicTypeReference<Calendar> CALENDAR_DATE = new BasicTypeReference<>(
564572
"calendar_date",
565573
Calendar.class,
566-
SqlTypes.DATE
574+
SqlTypes.DATE,
575+
TemporalType.DATE
567576
);
568577

569578
/**
@@ -573,7 +582,8 @@ private StandardBasicTypes() {
573582
public static final BasicTypeReference<Calendar> CALENDAR_TIME = new BasicTypeReference<>(
574583
"calendar_time",
575584
Calendar.class,
576-
SqlTypes.TIME
585+
SqlTypes.TIME,
586+
TemporalType.TIME
577587
);
578588

579589

0 commit comments

Comments
 (0)