Skip to content

Commit 6e1ae87

Browse files
committed
Revert "HHH-19976 Don't adopt AdjustableBasicType name to create derived type"
This reverts commit 4328313.
1 parent 4328313 commit 6e1ae87

File tree

8 files changed

+33
-136
lines changed

8 files changed

+33
-136
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public static <T> BasicValue.Resolution<T> from(
6868
final var typeConfiguration = bootstrapContext.getTypeConfiguration();
6969
final var basicTypeRegistry = typeConfiguration.getBasicTypeRegistry();
7070

71-
final JavaType<T> reflectedJtd;
71+
final var reflectedJtd = reflectedJtdResolver.get();
7272

7373
// NOTE: the distinction that is made below wrt `explicitJavaType` and `reflectedJtd`
7474
// is needed temporarily to trigger "legacy resolution" versus "ORM6 resolution.
@@ -110,7 +110,7 @@ else if ( explicitJdbcType != null ) {
110110
}
111111
}
112112
}
113-
else if ( ( reflectedJtd = reflectedJtdResolver.get() ) != null ) {
113+
else if ( reflectedJtd != null ) {
114114
// we were able to determine the "reflected java-type"
115115
// Use JTD if we know it to apply any specialized resolutions
116116
if ( reflectedJtd instanceof EnumJavaType enumJavaType ) {
@@ -150,7 +150,7 @@ else if ( explicitJdbcType != null ) {
150150

151151
if ( registeredType != null ) {
152152
// so here is the legacy resolution
153-
jdbcMapping = resolveSqlTypeIndicators( stdIndicators, registeredType, registeredType.getJavaTypeDescriptor() );
153+
jdbcMapping = resolveSqlTypeIndicators( stdIndicators, registeredType, reflectedJtd );
154154
}
155155
else {
156156
// there was not a "legacy" BasicType registration,
@@ -311,11 +311,7 @@ private static <T,E> BasicType<T> pluralBasicType(
311311
pluralJavaType.resolveType(
312312
bootstrapContext.getTypeConfiguration(),
313313
dialect,
314-
resolveSqlTypeIndicators(
315-
stdIndicators,
316-
registeredElementType,
317-
registeredElementType.getJavaTypeDescriptor()
318-
),
314+
resolveSqlTypeIndicators( stdIndicators, registeredElementType, elementJavaType ),
319315
selectable instanceof ColumnTypeInformation information ? information : null,
320316
stdIndicators
321317
);

hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ public void contributeType(CompositeUserType<?> type) {
762762
}
763763

764764
final int preferredSqlTypeCodeForDuration = getPreferredSqlTypeCodeForDuration( serviceRegistry );
765-
if ( preferredSqlTypeCodeForDuration != SqlTypes.DURATION ) {
765+
if ( preferredSqlTypeCodeForDuration != SqlTypes.INTERVAL_SECOND ) {
766766
adaptToPreferredSqlTypeCode(
767767
typeConfiguration,
768768
jdbcTypeRegistry,
@@ -772,6 +772,9 @@ public void contributeType(CompositeUserType<?> type) {
772772
"org.hibernate.type.DurationType"
773773
);
774774
}
775+
else {
776+
addFallbackIfNecessary( jdbcTypeRegistry, SqlTypes.INTERVAL_SECOND, SqlTypes.DURATION );
777+
}
775778

776779
addFallbackIfNecessary( jdbcTypeRegistry, SqlTypes.INET, SqlTypes.VARBINARY );
777780
addFallbackIfNecessary( jdbcTypeRegistry, SqlTypes.GEOMETRY, SqlTypes.VARBINARY );

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@ default <X> BasicType<X> resolveIndicatedType(JdbcTypeIndicators indicators, Jav
2525
indicators,
2626
domainJtd
2727
);
28-
if ( getJavaTypeDescriptor() != domainJtd || resolvedJdbcType != jdbcType ) {
28+
if ( resolvedJdbcType != jdbcType ) {
2929
return indicators.getTypeConfiguration().getBasicTypeRegistry()
30-
.resolve( domainJtd, resolvedJdbcType );
30+
.resolve( domainJtd, resolvedJdbcType, getName() );
3131
}
3232
}
3333
else {
3434
final int resolvedJdbcTypeCode = indicators.resolveJdbcTypeCode( jdbcType.getDefaultSqlTypeCode() );
35-
if ( getJavaTypeDescriptor() != domainJtd || resolvedJdbcTypeCode != jdbcType.getDefaultSqlTypeCode() ) {
35+
if ( resolvedJdbcTypeCode != jdbcType.getDefaultSqlTypeCode() ) {
3636
return indicators.getTypeConfiguration().getBasicTypeRegistry()
37-
.resolve( domainJtd, indicators.getJdbcType( resolvedJdbcTypeCode ) );
37+
.resolve( domainJtd, indicators.getJdbcType( resolvedJdbcTypeCode ), getName() );
3838
}
3939
}
4040
return (BasicType<X>) this;

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

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
package org.hibernate.type;
66

77
import java.io.Serializable;
8-
import java.util.ArrayList;
9-
import java.util.List;
108
import java.util.Map;
119
import java.util.concurrent.ConcurrentHashMap;
1210
import java.util.function.Supplier;
@@ -51,7 +49,6 @@ public class BasicTypeRegistry implements Serializable {
5149

5250
private final Map<String, BasicType<?>> typesByName = new ConcurrentHashMap<>();
5351
private final Map<String, BasicTypeReference<?>> typeReferencesByName = new ConcurrentHashMap<>();
54-
private final Map<String, List<BasicTypeReference<?>>> typeReferencesByJavaTypeName = new ConcurrentHashMap<>();
5552

5653
public BasicTypeRegistry(TypeConfiguration typeConfiguration){
5754
this.typeConfiguration = typeConfiguration;
@@ -259,28 +256,14 @@ private <J> BasicType<J> createIfUnregistered(
259256
if ( registeredTypeMatches( javaType, jdbcType, registeredType ) ) {
260257
return castNonNull( registeredType );
261258
}
262-
// Create an ad-hoc type since the java type doesn't come from the registry and is probably explicitly defined
263-
else if ( typeConfiguration.getJavaTypeRegistry().resolveDescriptor( javaType.getJavaType() ) == javaType ) {
264-
final var basicTypeReferences = typeReferencesByJavaTypeName.get( javaType.getTypeName() );
265-
if ( basicTypeReferences != null && !basicTypeReferences.isEmpty() ) {
266-
final var jdbcTypeRegistry = typeConfiguration.getJdbcTypeRegistry();
267-
for ( var typeReference : basicTypeReferences ) {
268-
if ( jdbcTypeRegistry.getDescriptor( typeReference.getSqlTypeCode() ) == jdbcType ) {
269-
final var basicType = typesByName.get( typeReference.getName() );
270-
//noinspection unchecked
271-
return registeredTypeMatches( javaType, jdbcType, basicType )
272-
? (BasicType<J>) basicType
273-
: (BasicType<J>) createBasicType( typeReference.getName(), typeReference );
274-
}
275-
}
276-
}
259+
else {
260+
final var createdType = creator.get();
261+
register( javaType, jdbcType, createdType );
262+
return createdType;
277263
}
278-
final var createdType = creator.get();
279-
register( javaType, jdbcType, createdType );
280-
return createdType;
281264
}
282265

283-
private static boolean registeredTypeMatches(JavaType<?> javaType, JdbcType jdbcType, @Nullable BasicType<?> registeredType) {
266+
private static <J> boolean registeredTypeMatches(JavaType<J> javaType, JdbcType jdbcType, BasicType<J> registeredType) {
284267
return registeredType != null
285268
&& registeredType.getJdbcType() == jdbcType
286269
&& registeredType.getMappedJavaType() == javaType;
@@ -351,7 +334,7 @@ public void addTypeReferenceRegistrationKey(String typeReferenceKey, String... a
351334
throw new IllegalArgumentException( "Couldn't find type reference with name: " + typeReferenceKey );
352335
}
353336
for ( String additionalTypeReferenceKey : additionalTypeReferenceKeys ) {
354-
addTypeReference( additionalTypeReferenceKey, basicTypeReference );
337+
typeReferencesByName.put( additionalTypeReferenceKey, basicTypeReference );
355338
}
356339
}
357340

@@ -401,7 +384,7 @@ public void addPrimeEntry(BasicTypeReference<?> type, String legacyTypeClassName
401384

402385
// Legacy name registration
403386
if ( isNotEmpty( legacyTypeClassName ) ) {
404-
addTypeReference( legacyTypeClassName, type );
387+
typeReferencesByName.put( legacyTypeClassName, type );
405388
}
406389

407390
// explicit registration keys
@@ -446,31 +429,19 @@ private void applyRegistrationKeys(BasicTypeReference<?> type, String[] keys) {
446429
// Incidentally, this might also help with map lookup efficiency.
447430
key = key.intern();
448431

449-
addTypeReference( key, type );
450-
}
451-
}
452-
}
453-
454-
private void addTypeReference(String name, BasicTypeReference<?> typeReference) {
455-
// Incredibly verbose logging disabled
456-
// LOG.tracef( "Adding type registration %s -> %s", key, type );
432+
// Incredibly verbose logging disabled
433+
// LOG.tracef( "Adding type registration %s -> %s", key, type );
457434

458435
// final BasicTypeReference<?> old =
459-
typeReferencesByName.put( name, typeReference );
460-
// if ( old != null && old != type ) {
461-
// LOG.tracef(
462-
// "Type registration key [%s] overrode previous entry : `%s`",
463-
// key,
464-
// old
465-
// );
466-
// }
467-
468-
final var basicTypeReferences = typeReferencesByJavaTypeName.computeIfAbsent(
469-
typeReference.getJavaType().getTypeName(),
470-
s -> new ArrayList<>()
471-
);
472-
if ( !basicTypeReferences.contains( typeReference ) ) {
473-
basicTypeReferences.add( typeReference );
436+
typeReferencesByName.put( key, type );
437+
// if ( old != null && old != type ) {
438+
// LOG.tracef(
439+
// "Type registration key [%s] overrode previous entry : `%s`",
440+
// key,
441+
// old
442+
// );
443+
// }
444+
}
474445
}
475446
}
476447
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,12 +345,13 @@ private StandardBasicTypes() {
345345
// Date / time data
346346

347347
/**
348-
* The standard Hibernate type for mapping {@link Duration} to JDBC {@link org.hibernate.type.SqlTypes#DURATION DURATION}.
348+
* The standard Hibernate type for mapping {@link Duration} to JDBC {@link org.hibernate.type.SqlTypes#INTERVAL_SECOND INTERVAL_SECOND}
349+
* or {@link org.hibernate.type.SqlTypes#NUMERIC NUMERIC} as a fallback.
349350
*/
350351
public static final BasicTypeReference<Duration> DURATION = new BasicTypeReference<>(
351352
"Duration",
352353
Duration.class,
353-
SqlTypes.DURATION
354+
SqlTypes.INTERVAL_SECOND
354355
);
355356

356357
/**

hibernate-core/src/test/java/org/hibernate/orm/test/mapping/basic/DurationMappingTests.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
import org.hibernate.metamodel.mapping.internal.BasicAttributeMapping;
1717
import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
1818
import org.hibernate.persister.entity.EntityPersister;
19-
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
20-
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
2119
import org.hibernate.type.SqlTypes;
2220
import org.hibernate.type.descriptor.jdbc.AdjustableJdbcType;
2321
import org.hibernate.type.descriptor.jdbc.JdbcType;
@@ -46,7 +44,6 @@
4644
* 2.2.21. Duration
4745
* By default, Hibernate maps Duration to the NUMERIC SQL type.
4846
*/
49-
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsIntervalSecondType.class)
5047
@ServiceRegistry(settings = @Setting(name = AvailableSettings.PREFERRED_DURATION_JDBC_TYPE, value = "INTERVAL_SECOND"))
5148
public class DurationMappingTests {
5249

hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NationalizedTest.java

Lines changed: 0 additions & 65 deletions
This file was deleted.

hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFeatureChecks.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,12 +1113,6 @@ public boolean apply(Dialect dialect) {
11131113
}
11141114
}
11151115

1116-
public static class SupportsIntervalSecondType implements DialectFeatureCheck {
1117-
public boolean apply(Dialect dialect) {
1118-
return definesDdlType( dialect, SqlTypes.INTERVAL_SECOND );
1119-
}
1120-
}
1121-
11221116
public static class SupportsVectorType implements DialectFeatureCheck {
11231117
public boolean apply(Dialect dialect) {
11241118
return definesDdlType( dialect, SqlTypes.VECTOR );

0 commit comments

Comments
 (0)