diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/CockroachLegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/CockroachLegacyDialect.java index 83b691ec7557..0ca6c10e844d 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/CockroachLegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/CockroachLegacyDialect.java @@ -405,7 +405,7 @@ protected void contributeCockroachTypes(TypeContributions typeContributions, Ser ObjectNullAsBinaryTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DB2LegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DB2LegacyDialect.java index 82810235d43e..04270bd3699b 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DB2LegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DB2LegacyDialect.java @@ -1135,7 +1135,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullResolvingJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyDialect.java index 5cb7bc92015d..ab10429cd830 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyDialect.java @@ -671,7 +671,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullResolvingJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); } diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyLegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyLegacyDialect.java index 38c77c1a2b65..2d31d2f6b2bf 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyLegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DerbyLegacyDialect.java @@ -666,7 +666,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullResolvingJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); } diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/GaussDBDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/GaussDBDialect.java index ec1882995618..c4abd86b5dc1 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/GaussDBDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/GaussDBDialect.java @@ -1270,7 +1270,7 @@ protected void contributeGaussDBTypes(TypeContributions typeContributions) { ObjectNullAsBinaryTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java index 18b4ba25d4a7..00743146139d 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java @@ -1128,7 +1128,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullAsBinaryTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); } diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MySQLLegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MySQLLegacyDialect.java index 0e9fadbb6f8c..66e67c1ac372 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MySQLLegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MySQLLegacyDialect.java @@ -756,7 +756,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry NullJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); } diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/OracleLegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/OracleLegacyDialect.java index c7a0a2d09167..fa53ea2c9357 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/OracleLegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/OracleLegacyDialect.java @@ -1029,7 +1029,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry NullJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); typeContributions.contributeType( @@ -1037,7 +1037,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullAsNullTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); } diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/PostgreSQLLegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/PostgreSQLLegacyDialect.java index 9d29ba01e9c3..53d56f931817 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/PostgreSQLLegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/PostgreSQLLegacyDialect.java @@ -1558,7 +1558,7 @@ protected void contributePostgreSQLTypes(TypeContributions typeContributions, Se ObjectNullAsBinaryTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SingleStoreDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SingleStoreDialect.java index 76d2f97ecce8..f33e9d4cefa4 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SingleStoreDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SingleStoreDialect.java @@ -665,7 +665,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry NullJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); jdbcTypeRegistry.addDescriptor( EnumJdbcType.INSTANCE ); diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseLegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseLegacyDialect.java index d025598c4c15..1bdfdce0ff27 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseLegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SybaseLegacyDialect.java @@ -262,7 +262,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullAsBinaryTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); typeContributions.contributeType( @@ -270,7 +270,7 @@ public void contributeTypes(TypeContributions typeContributions, ServiceRegistry ObjectNullAsBinaryTypeJdbcType.INSTANCE, typeContributions.getTypeConfiguration() .getJavaTypeRegistry() - .getDescriptor( Object.class ) + .resolveDescriptor( Object.class ) ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/convert/internal/ConverterHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/model/convert/internal/ConverterHelper.java index d56ce6bfca52..324b813bd1ee 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/convert/internal/ConverterHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/convert/internal/ConverterHelper.java @@ -15,7 +15,6 @@ import org.hibernate.boot.spi.ClassmateContext; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.internal.util.GenericsHelper; -import org.hibernate.internal.util.type.PrimitiveWrapperHelper; import org.hibernate.models.spi.MemberDetails; import com.fasterxml.classmate.ResolvedType; @@ -24,6 +23,8 @@ import com.fasterxml.classmate.members.ResolvedMethod; import jakarta.persistence.AttributeConverter; +import static org.hibernate.internal.util.type.PrimitiveWrappers.canonicalize; + /** * Helpers related to handling converters */ @@ -100,11 +101,8 @@ else if ( converterParamTypes.size() != 2 ) { * @return {@code true} if they match, otherwise {@code false}. */ public static boolean typesMatch(ResolvedType converterDefinedType, ResolvedType checkType) { - Class erasedCheckType = checkType.getErasedType(); - if ( erasedCheckType.isPrimitive() ) { - erasedCheckType = PrimitiveWrapperHelper.getDescriptorByPrimitiveType( erasedCheckType ).getWrapperClass(); - } - else if ( erasedCheckType.isArray() ) { + final var erasedCheckType = canonicalize( checkType.getErasedType() ); + if ( erasedCheckType.isArray() ) { // converterDefinedType have type parameters if it extends super generic class // but checkType doesn't have any type parameters // comparing erased type is enough diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java index 6658fc70de8e..115841274d88 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/BasicValueBinder.java @@ -831,7 +831,7 @@ private void prepareAnyDiscriminator(MemberDetails memberDetails) { return originalResolution != null ? originalResolution : typeConfiguration.getJavaTypeRegistry() - .getDescriptor( implicitJavaTypeAccess.apply( typeConfiguration ) ) + .resolveDescriptor( implicitJavaTypeAccess.apply( typeConfiguration ) ) .getRecommendedJdbcType( typeConfiguration.getCurrentBaseSqlTypeIndicators() ); }; } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java b/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java index 11bc77e5d211..e00feb694a43 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/InferredBasicValueResolver.java @@ -194,7 +194,7 @@ else if ( reflectedJtd instanceof SerializableJavaType else { if ( explicitJdbcType != null ) { // we have an explicit STD, but no JTD - infer JTD - // NOTE : yes it's an odd case, but easy to implement here, so... + // NOTE: yes it's an odd case, but easy to implement here, so... Integer length = null; Integer scale = null; if ( selectable instanceof Column column ) { @@ -212,8 +212,10 @@ else if ( column.getLength() != null ) { } } - final JavaType recommendedJtd = - explicitJdbcType.getJdbcRecommendedJavaTypeMapping( length, scale, typeConfiguration ); + final var recommendedJavaType = + explicitJdbcType.getRecommendedJavaType( length, scale, typeConfiguration ); + // TODO: check this type cast + final var recommendedJtd = (JavaType) recommendedJavaType; jdbcMapping = resolveSqlTypeIndicators( stdIndicators, basicTypeRegistry.resolve( recommendedJtd, explicitJdbcType ), diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java b/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java index d4250858d261..66cd05b562d9 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/VersionResolution.java @@ -28,21 +28,21 @@ */ public class VersionResolution implements BasicValue.Resolution { - // todo (6.0) : support explicit JTD? - // todo (6.0) : support explicit STD? - - public static VersionResolution from( + public static VersionResolution from( Function implicitJavaTypeAccess, TimeZoneStorageType timeZoneStorageType, MetadataBuildingContext context) { - - // todo (6.0) : add support for Dialect-specific interpretation? - final var typeConfiguration = context.getBootstrapContext().getTypeConfiguration(); final var implicitJavaType = implicitJavaTypeAccess.apply( typeConfiguration ); - final JavaType registered = typeConfiguration.getJavaTypeRegistry().getDescriptor( implicitJavaType ); - final var basicJavaType = (BasicJavaType) registered; + final var registered = typeConfiguration.getJavaTypeRegistry().resolveDescriptor( implicitJavaType ); + return resolve( timeZoneStorageType, context, (BasicJavaType) registered ); + } + private static VersionResolution resolve( + TimeZoneStorageType timeZoneStorageType, + MetadataBuildingContext context, + BasicJavaType basicJavaType) { + final var typeConfiguration = context.getBootstrapContext().getTypeConfiguration(); final var recommendedJdbcType = basicJavaType.getRecommendedJdbcType( new JdbcTypeIndicators() { @Override @@ -50,7 +50,7 @@ public TypeConfiguration getTypeConfiguration() { return typeConfiguration; } - @Override + @Override @SuppressWarnings("deprecation") public TemporalType getTemporalPrecision() { // if it is a temporal version, it needs to be a TIMESTAMP return TemporalType.TIMESTAMP; @@ -106,7 +106,6 @@ public Dialect getDialect() { final var basicTypeRegistry = typeConfiguration.getBasicTypeRegistry(); final var basicType = basicTypeRegistry.resolve( basicJavaType, recommendedJdbcType ); final var legacyType = basicTypeRegistry.getRegisteredType( basicJavaType.getJavaTypeClass() ); - assert legacyType.getJdbcType().getDefaultSqlTypeCode() == recommendedJdbcType.getDefaultSqlTypeCode(); return new VersionResolution<>( basicJavaType, recommendedJdbcType, basicType, legacyType ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/DynamicModelHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/DynamicModelHelper.java index 9894f3953083..fb689fb3df4b 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/DynamicModelHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/DynamicModelHelper.java @@ -11,26 +11,20 @@ import org.hibernate.boot.jaxb.mapping.spi.JaxbAnyMapping; import org.hibernate.boot.jaxb.mapping.spi.JaxbAssociationAttribute; import org.hibernate.boot.jaxb.mapping.spi.JaxbAttributesContainer; -import org.hibernate.boot.jaxb.mapping.spi.JaxbAttributesContainerImpl; import org.hibernate.boot.jaxb.mapping.spi.JaxbBasicImpl; import org.hibernate.boot.jaxb.mapping.spi.JaxbBasicMapping; import org.hibernate.boot.jaxb.mapping.spi.JaxbElementCollectionImpl; import org.hibernate.boot.jaxb.mapping.spi.JaxbEmbeddable; -import org.hibernate.boot.jaxb.mapping.spi.JaxbEmbeddedIdImpl; import org.hibernate.boot.jaxb.mapping.spi.JaxbEmbeddedMapping; import org.hibernate.boot.jaxb.mapping.spi.JaxbEntity; import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityImpl; import org.hibernate.boot.jaxb.mapping.spi.JaxbManagedType; import org.hibernate.boot.jaxb.mapping.spi.JaxbMappedSuperclassImpl; import org.hibernate.boot.jaxb.mapping.spi.JaxbPluralAttribute; -import org.hibernate.boot.jaxb.mapping.spi.JaxbTenantIdImpl; -import org.hibernate.boot.jaxb.mapping.spi.JaxbUserTypeImpl; import org.hibernate.boot.models.internal.ModelsHelper; import org.hibernate.boot.models.xml.UnknownAttributeTypeException; import org.hibernate.boot.models.xml.spi.XmlDocumentContext; import org.hibernate.boot.spi.BootstrapContext; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.internal.util.collections.CollectionHelper; import org.hibernate.models.internal.ClassTypeDetailsImpl; import org.hibernate.models.internal.MutableClassDetailsRegistry; import org.hibernate.models.internal.ParameterizedTypeDetailsImpl; @@ -39,7 +33,6 @@ import org.hibernate.models.internal.dynamic.DynamicFieldDetails; import org.hibernate.models.internal.jdk.JdkClassDetails; import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.ClassDetailsRegistry; import org.hibernate.models.spi.ModelsContext; import org.hibernate.models.spi.MutableClassDetails; import org.hibernate.models.spi.TypeDetails; @@ -58,6 +51,9 @@ import static org.hibernate.internal.util.NullnessHelper.nullif; import static org.hibernate.internal.util.ReflectHelper.OBJECT_CLASS_NAME; import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.isNotEmpty; +import static org.hibernate.internal.util.StringHelper.nullIfEmpty; +import static org.hibernate.internal.util.collections.CollectionHelper.isNotEmpty; import static org.hibernate.models.internal.ModifierUtils.DYNAMIC_ATTRIBUTE_MODIFIERS; /** @@ -74,10 +70,9 @@ static void prepareDynamicClass( JaxbManagedType jaxbManagedType, XmlDocumentContext xmlDocumentContext) { if ( jaxbManagedType instanceof JaxbEntityImpl jaxbDynamicEntity ) { - final JaxbAttributesContainerImpl attributes = jaxbDynamicEntity.getAttributes(); - + final var attributes = jaxbDynamicEntity.getAttributes(); if ( attributes != null ) { - if ( CollectionHelper.isNotEmpty( attributes.getIdAttributes() ) ) { + if ( isNotEmpty( attributes.getIdAttributes() ) ) { // attributes.getIdAttributes().forEach( (jaxbId) -> { final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( @@ -99,13 +94,13 @@ static void prepareDynamicClass( } else if ( attributes.getEmbeddedIdAttribute() != null ) { // - final JaxbEmbeddedIdImpl embeddedId = attributes.getEmbeddedIdAttribute(); - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + final var embeddedId = attributes.getEmbeddedIdAttribute(); + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManagedType, embeddedId, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( embeddedId.getName(), attributeJavaType, classDetails, @@ -118,14 +113,15 @@ else if ( attributes.getEmbeddedIdAttribute() != null ) { } // - if ( attributes.getNaturalId() != null ) { - attributes.getNaturalId().getBasicAttributes().forEach( (jaxbBasic) -> { - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + final var naturalId = attributes.getNaturalId(); + if ( naturalId != null ) { + naturalId.getBasicAttributes().forEach( (jaxbBasic) -> { + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManagedType, jaxbBasic, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbBasic.getName(), attributeJavaType, classDetails, @@ -137,13 +133,13 @@ else if ( attributes.getEmbeddedIdAttribute() != null ) { classDetails.addField( member ); } ); - attributes.getNaturalId().getEmbeddedAttributes().forEach( (jaxbEmbedded) -> { - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + naturalId.getEmbeddedAttributes().forEach( (jaxbEmbedded) -> { + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManagedType, jaxbEmbedded, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbEmbedded.getName(), attributeJavaType, classDetails, @@ -155,12 +151,12 @@ else if ( attributes.getEmbeddedIdAttribute() != null ) { classDetails.addField( member ); } ); - attributes.getNaturalId().getManyToOneAttributes().forEach( (jaxbManyToOne) -> { - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + naturalId.getManyToOneAttributes().forEach( (jaxbManyToOne) -> { + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManyToOne, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbManyToOne.getName(), attributeJavaType, classDetails, @@ -172,12 +168,12 @@ else if ( attributes.getEmbeddedIdAttribute() != null ) { classDetails.addField( member ); } ); - attributes.getNaturalId().getAnyMappingAttributes().forEach( (jaxbAnyMapping) -> { - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + naturalId.getAnyMappingAttributes().forEach( (jaxbAnyMapping) -> { + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbAnyMapping, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbAnyMapping.getName(), attributeJavaType, classDetails, @@ -192,14 +188,14 @@ else if ( attributes.getEmbeddedIdAttribute() != null ) { } // - final JaxbTenantIdImpl tenantId = jaxbDynamicEntity.getTenantId(); + final var tenantId = jaxbDynamicEntity.getTenantId(); if ( tenantId != null ) { - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManagedType, tenantId, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( tenantId.getName(), attributeJavaType, classDetails, @@ -212,18 +208,17 @@ else if ( attributes.getEmbeddedIdAttribute() != null ) { } } else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSuperclass ) { - final JaxbAttributesContainerImpl attributes = jaxbMappedSuperclass.getAttributes(); - + final var attributes = jaxbMappedSuperclass.getAttributes(); if ( attributes != null ) { - if ( CollectionHelper.isNotEmpty( attributes.getIdAttributes() ) ) { + if ( isNotEmpty( attributes.getIdAttributes() ) ) { // attributes.getIdAttributes().forEach( (jaxbId) -> { - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManagedType, jaxbId, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbId.getName(), attributeJavaType, classDetails, @@ -237,13 +232,13 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla } else { // - final JaxbEmbeddedIdImpl embeddedId = attributes.getEmbeddedIdAttribute(); - final TypeDetails attributeJavaType = determineAttributeJavaTypeDetails( + final var embeddedId = attributes.getEmbeddedIdAttribute(); + final var attributeJavaType = determineAttributeJavaTypeDetails( jaxbManagedType, embeddedId, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( embeddedId.getName(), attributeJavaType, classDetails, @@ -262,7 +257,7 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla if ( attributes != null ) { // attributes.getBasicAttributes().forEach( (jaxbBasic) -> { - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbBasic.getName(), determineAttributeJavaTypeDetails( jaxbManagedType, jaxbBasic, xmlDocumentContext ), classDetails, @@ -276,7 +271,7 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getEmbeddedAttributes().forEach( (jaxbEmbedded) -> { - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbEmbedded.getName(), determineAttributeJavaTypeDetails( jaxbManagedType, jaxbEmbedded, xmlDocumentContext ), classDetails, @@ -290,7 +285,7 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getOneToOneAttributes().forEach( (jaxbOneToOne) -> { - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbOneToOne.getName(), determineAttributeJavaTypeDetails( jaxbOneToOne, xmlDocumentContext ), classDetails, @@ -304,7 +299,7 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getManyToOneAttributes().forEach( (jaxbManyToOne) -> { - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbManyToOne.getName(), determineAttributeJavaTypeDetails( jaxbManyToOne, xmlDocumentContext ), classDetails, @@ -318,7 +313,7 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getAnyMappingAttributes().forEach( (jaxbAnyMapping) -> { - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbAnyMapping.getName(), determineAttributeJavaTypeDetails( jaxbAnyMapping, xmlDocumentContext ), classDetails, @@ -332,8 +327,8 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getElementCollectionAttributes().forEach( (jaxbElementCollection) -> { - final TypeDetails elementType = determineAttributeJavaTypeDetails( jaxbElementCollection, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var elementType = determineAttributeJavaTypeDetails( jaxbElementCollection, xmlDocumentContext ); + final var member = new DynamicFieldDetails( jaxbElementCollection.getName(), makeCollectionType( classDetails, jaxbElementCollection, elementType, xmlDocumentContext ), classDetails, @@ -347,8 +342,8 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getOneToManyAttributes().forEach( (jaxbOneToMany) -> { - final TypeDetails elementType = determineAttributeJavaTypeDetails( jaxbOneToMany, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var elementType = determineAttributeJavaTypeDetails( jaxbOneToMany, xmlDocumentContext ); + final var member = new DynamicFieldDetails( jaxbOneToMany.getName(), // todo : this is wrong. should be the collection-type (List, ...) // wrapping the result from determineAttributeJavaTypeDetails @@ -364,8 +359,8 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getManyToManyAttributes().forEach( (jaxbManyToMany) -> { - final TypeDetails elementType = determineAttributeJavaTypeDetails( jaxbManyToMany, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var elementType = determineAttributeJavaTypeDetails( jaxbManyToMany, xmlDocumentContext ); + final var member = new DynamicFieldDetails( jaxbManyToMany.getName(), makeCollectionType( classDetails, jaxbManyToMany, elementType, xmlDocumentContext ), classDetails, @@ -379,11 +374,11 @@ else if ( jaxbManagedType instanceof JaxbMappedSuperclassImpl jaxbMappedSupercla // attributes.getPluralAnyMappingAttributes().forEach( (jaxbPluralAnyMapping) -> { - final TypeDetails attributeType = determineAttributeJavaTypeDetails( + final var attributeType = determineAttributeJavaTypeDetails( jaxbPluralAnyMapping, xmlDocumentContext ); - final DynamicFieldDetails member = new DynamicFieldDetails( + final var member = new DynamicFieldDetails( jaxbPluralAnyMapping.getName(), attributeType, classDetails, @@ -409,7 +404,7 @@ private static TypeDetails makeCollectionType( JaxbPluralAttribute jaxbPluralAttribute, TypeDetails elementType, XmlDocumentContext xmlDocumentContext) { - final MutableClassDetailsRegistry classDetailsRegistry = xmlDocumentContext + final var classDetailsRegistry = xmlDocumentContext .getBootstrapContext() .getModelsContext() .getClassDetailsRegistry() @@ -484,9 +479,9 @@ private static ClassDetails setType(JaxbPluralAttribute jaxbPluralAttribute, Mut } private static boolean isSorted(JaxbPluralAttribute jaxbPluralAttribute) { - return StringHelper.isNotEmpty( jaxbPluralAttribute.getSort() ) + return isNotEmpty( jaxbPluralAttribute.getSort() ) || jaxbPluralAttribute.getSortNatural() != null - || StringHelper.isNotEmpty( jaxbPluralAttribute.getOrderBy() ); + || isNotEmpty( jaxbPluralAttribute.getOrderBy() ); } private static ClassDetails mapType(JaxbPluralAttribute jaxbPluralAttribute, MutableClassDetailsRegistry classDetailsRegistry) { @@ -523,7 +518,7 @@ private static ClassDetails determineAttributeJavaType( // explicit final String target = jaxbBasicMapping.getTarget(); if ( isNotEmpty( target ) ) { - final SimpleTypeInterpretation simpleTypeInterpretation = SimpleTypeInterpretation.interpret( target ); + final var simpleTypeInterpretation = SimpleTypeInterpretation.interpret( target ); if ( simpleTypeInterpretation == null ) { throw new UnknownAttributeTypeException( String.format( @@ -541,7 +536,7 @@ private static ClassDetails determineAttributeJavaType( final ModelsContext modelsContext = bootstrapContext.getModelsContext(); // UserType - final JaxbUserTypeImpl userTypeNode = jaxbBasicMapping.getType(); + final var userTypeNode = jaxbBasicMapping.getType(); if ( userTypeNode != null ) { final String userTypeImplName = userTypeNode.getValue(); if ( isNotEmpty( userTypeImplName ) ) { @@ -556,10 +551,10 @@ private static ClassDetails determineAttributeJavaType( // JavaType final String javaTypeImplName = jaxbBasicMapping.getJavaType(); if ( isNotEmpty( javaTypeImplName ) ) { - final ClassDetails javaTypeImplDetails = xmlDocumentContext.resolveJavaType( javaTypeImplName ); + final var javaTypeImplDetails = xmlDocumentContext.resolveJavaType( javaTypeImplName ); // safe to convert to class, though unfortunate to have to instantiate it... final JavaType javaType = createInstance( javaTypeImplDetails ); - final Class modelClass = javaType.getJavaTypeClass(); + final var modelClass = javaType.getJavaTypeClass(); return modelsContext.getClassDetailsRegistry().getClassDetails( modelClass.getName() ); } @@ -568,7 +563,7 @@ private static ClassDetails determineAttributeJavaType( final Integer jdbcTypeCode = jaxbBasicMapping.getJdbcTypeCode(); final JdbcType jdbcType; if ( isNotEmpty( jdbcTypeImplName ) ) { - final ClassDetails jdbcTypeImplDetails = xmlDocumentContext.resolveJavaType( javaTypeImplName ); + final var jdbcTypeImplDetails = xmlDocumentContext.resolveJavaType( javaTypeImplName ); jdbcType = createInstance( jdbcTypeImplDetails ); } else if ( jdbcTypeCode != null ) { @@ -578,13 +573,13 @@ else if ( jdbcTypeCode != null ) { jdbcType = null; } if ( jdbcType != null ) { - final JavaType javaType = jdbcType.getJdbcRecommendedJavaTypeMapping( 0, 0, bootstrapContext.getTypeConfiguration() ); - final Class modelClass = javaType.getJavaTypeClass(); + final var javaType = jdbcType.getRecommendedJavaType( 0, 0, bootstrapContext.getTypeConfiguration() ); + final var modelClass = javaType.getJavaTypeClass(); return modelsContext.getClassDetailsRegistry().getClassDetails( modelClass.getName() ); } if ( jaxbBasicMapping instanceof JaxbBasicImpl jaxbBasicAttribute ) { - final TemporalType temporalType = jaxbBasicAttribute.getTemporal(); + final var temporalType = jaxbBasicAttribute.getTemporal(); if ( temporalType != null ) { return resolveTemporalJavaType( temporalType, xmlDocumentContext ); } @@ -592,10 +587,10 @@ else if ( jdbcTypeCode != null ) { final String declaringTypeName; if ( declaringType instanceof JaxbEntity jaxbEntity ) { - declaringTypeName = StringHelper.nullIfEmpty( jaxbEntity.getName() ); + declaringTypeName = nullIfEmpty( jaxbEntity.getName() ); } else if ( declaringType instanceof JaxbEmbeddable jaxbEmbeddable ) { - declaringTypeName = StringHelper.nullIfEmpty( jaxbEmbeddable.getName() ); + declaringTypeName = nullIfEmpty( jaxbEmbeddable.getName() ); } else { declaringTypeName = null; @@ -617,16 +612,16 @@ else if ( declaringType instanceof JaxbEmbeddable jaxbEmbeddable ) { * SimpleTypeInterpretation we only care about the wrapper. */ private static ClassDetails resolveBasicMappingTarget(SimpleTypeInterpretation targetInterpretation, XmlDocumentContext xmlDocumentContext) { - final ModelsContext modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); - final ClassDetailsRegistry classDetailsRegistry = modelsContext.getClassDetailsRegistry(); + final var modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); + final var classDetailsRegistry = modelsContext.getClassDetailsRegistry(); return classDetailsRegistry.resolveClassDetails( targetInterpretation.getJavaType().getName() ); } private static MutableClassDetails resolveTemporalJavaType( TemporalType temporalType, XmlDocumentContext xmlDocumentContext) { - final ModelsContext modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); - final MutableClassDetailsRegistry classDetailsRegistry = modelsContext.getClassDetailsRegistry().as( MutableClassDetailsRegistry.class ); + final var modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); + final var classDetailsRegistry = modelsContext.getClassDetailsRegistry().as( MutableClassDetailsRegistry.class ); switch ( temporalType ) { case DATE -> { return (MutableClassDetails) classDetailsRegistry.resolveClassDetails( @@ -682,8 +677,8 @@ private static TypeDetails determineAttributeJavaTypeDetails( XmlDocumentContext xmlDocumentContext) { final String target = jaxbAssociationAttribute.getTargetEntity(); if ( isNotEmpty( target ) ) { - final ModelsContext modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); - final ClassDetails classDetails = ModelsHelper.resolveClassDetails( + final var modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); + final var classDetails = ModelsHelper.resolveClassDetails( target, modelsContext.getClassDetailsRegistry(), () -> new DynamicClassDetails( @@ -711,8 +706,8 @@ private static TypeDetails determineAttributeJavaTypeDetails( XmlDocumentContext xmlDocumentContext) { // Logically this is Object, which is what we return here for now. // todo : might be nice to allow specifying a "common interface" - final ModelsContext modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); - final ClassDetails objectClassDetails = modelsContext.getClassDetailsRegistry().resolveClassDetails( OBJECT_CLASS_NAME ); + final var modelsContext = xmlDocumentContext.getBootstrapContext().getModelsContext(); + final var objectClassDetails = modelsContext.getClassDetailsRegistry().resolveClassDetails( OBJECT_CLASS_NAME ); return new ClassTypeDetailsImpl( objectClassDetails, TypeDetails.Kind.CLASS ); } @@ -723,7 +718,7 @@ private static TypeDetails determineAttributeJavaTypeDetails( private static TypeDetails determineAttributeJavaTypeDetails( JaxbElementCollectionImpl jaxbElementCollection, XmlDocumentContext xmlDocumentContext) { - final LimitedCollectionClassification classification = nullif( jaxbElementCollection.getClassification(), LimitedCollectionClassification.BAG ); + final var classification = nullif( jaxbElementCollection.getClassification(), LimitedCollectionClassification.BAG ); return switch ( classification ) { case BAG -> resolveCollectionType( Collection.class, xmlDocumentContext ); case LIST -> resolveCollectionType( List.class, xmlDocumentContext ); @@ -733,7 +728,7 @@ private static TypeDetails determineAttributeJavaTypeDetails( } private static TypeDetails resolveCollectionType(Class collectionType, XmlDocumentContext xmlDocumentContext) { - final ClassDetails classDetails = xmlDocumentContext + final var classDetails = xmlDocumentContext .getBootstrapContext() .getModelsContext() .getClassDetailsRegistry() diff --git a/hibernate-core/src/main/java/org/hibernate/cache/internal/EnabledCaching.java b/hibernate-core/src/main/java/org/hibernate/cache/internal/EnabledCaching.java index 06dc1ebf52bc..c927b2d92702 100644 --- a/hibernate-core/src/main/java/org/hibernate/cache/internal/EnabledCaching.java +++ b/hibernate-core/src/main/java/org/hibernate/cache/internal/EnabledCaching.java @@ -4,9 +4,6 @@ */ package org.hibernate.cache.internal; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.Locale; import java.util.Map; import java.util.Objects; @@ -71,9 +68,6 @@ public class EnabledCaching implements CacheImplementor, DomainDataRegionBuildin private final Map namedQueryResultsCacheMap = new ConcurrentHashMap<>(); - private final Set legacySecondLevelCacheNames = new LinkedHashSet<>(); - private final Map> legacyNaturalIdAccessesForRegion = new ConcurrentHashMap<>(); - public EnabledCaching(SessionFactoryImplementor sessionFactory) { this.sessionFactory = sessionFactory; final var options = sessionFactory.getSessionFactoryOptions(); @@ -105,7 +99,6 @@ private TimestampsCache buildTimestampsCache(SessionFactoryImplementor sessionFa DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, sessionFactory ); - legacySecondLevelCacheNames.add( timestampsRegion.getName() ); return sessionFactory.getSessionFactoryOptions().getTimestampsCacheFactory() .buildTimestampsCache( this, timestampsRegion ); } @@ -134,27 +127,16 @@ public void prime(Set cacheRegionConfigs) { for ( var entityAccessConfig : regionConfig.getEntityCaching() ) { final var navigableRole = entityAccessConfig.getNavigableRole(); entityAccessMap.put( navigableRole, region.getEntityDataAccess( navigableRole ) ); - legacySecondLevelCacheNames.add( qualifiedRegionName( region ) ); } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Natural-id caching - final var naturalIdCaching = regionConfig.getNaturalIdCaching(); - if ( naturalIdCaching.isEmpty() ) { - legacyNaturalIdAccessesForRegion.put( region.getName(), Collections.emptySet() ); - } - else { - final Set accesses = new HashSet<>(); - for ( var naturalIdAccessConfig : naturalIdCaching ) { - final var navigableRole = naturalIdAccessConfig.getNavigableRole(); - final var naturalIdDataAccess = - naturalIdAccessMap.put( navigableRole, - region.getNaturalIdDataAccess( navigableRole ) ); - accesses.add( naturalIdDataAccess ); - } - legacyNaturalIdAccessesForRegion.put( region.getName(), accesses ); + for ( var naturalIdAccessConfig : regionConfig.getNaturalIdCaching() ) { + final var navigableRole = naturalIdAccessConfig.getNavigableRole(); + naturalIdAccessMap.put( navigableRole, + region.getNaturalIdDataAccess( navigableRole ) ); } @@ -165,7 +147,6 @@ public void prime(Set cacheRegionConfigs) { final var navigableRole = collectionAccessConfig.getNavigableRole(); collectionAccessMap.put( navigableRole, region.getCollectionDataAccess( navigableRole ) ); - legacySecondLevelCacheNames.add( qualifiedRegionName( region ) ); } } @@ -213,7 +194,6 @@ public Region getRegion(String regionName) { } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Entity data @@ -309,7 +289,6 @@ public void evictEntityData() { } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Natural-id data @@ -341,7 +320,6 @@ private void evictNaturalIdData(NavigableRole rootEntityRole, NaturalIdDataAcces } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Collection data @@ -427,7 +405,7 @@ private void evictQueryResultRegion(QueryResultsCache cache) { public void evictQueryRegions() { LOG.evictingAllQueryRegions(); evictQueryResultRegion( defaultQueryResultsCache ); - for ( QueryResultsCache cache : namedQueryResultsCacheMap.values() ) { + for ( var cache : namedQueryResultsCacheMap.values() ) { evictQueryResultRegion( cache ); } } @@ -470,7 +448,7 @@ else if ( regionName == null || regionName.equals( getDefaultResultCacheName() ) } else { final var existing = namedQueryResultsCacheMap.get( regionName ); - return existing != null ? existing : makeQueryResultsRegionAccess( regionName ); + return existing != null ? existing : makeQueryResultsCache( regionName ); } } @@ -487,21 +465,20 @@ else if ( regionName == null || regionName.equals( getDefaultResultCacheName() ) } } - protected QueryResultsCache makeQueryResultsRegionAccess(String regionName) { - final var regionAccess = new QueryResultsCacheImpl( getQueryResultsRegion( regionName ), timestampsCache ); + protected QueryResultsCache makeQueryResultsCache(String regionName) { + final var regionAccess = new QueryResultsCacheImpl( queryResultsRegion( regionName ), timestampsCache ); namedQueryResultsCacheMap.put( regionName, regionAccess ); - legacySecondLevelCacheNames.add( regionName ); return regionAccess; } - private QueryResultsRegion getQueryResultsRegion(String regionName) { - final Region region = regionsByName.computeIfAbsent( regionName, this::makeQueryResultsRegion ); - return region instanceof QueryResultsRegion queryResultsRegion + private QueryResultsRegion queryResultsRegion(String regionName) { + return regionsByName.computeIfAbsent( regionName, this::buildQueryResultsRegion ) + instanceof QueryResultsRegion queryResultsRegion ? queryResultsRegion // There was already a different type of Region with the same name. - : queryResultsRegionsByDuplicateName.computeIfAbsent( regionName, this::makeQueryResultsRegion ); + : queryResultsRegionsByDuplicateName.computeIfAbsent( regionName, this::buildQueryResultsRegion ); } - protected QueryResultsRegion makeQueryResultsRegion(String regionName) { + protected QueryResultsRegion buildQueryResultsRegion(String regionName) { return regionFactory.buildQueryResultsRegion( regionName, getSessionFactory() ); } @@ -544,7 +521,6 @@ public void close() { } - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // JPA-defined methods @@ -567,8 +543,6 @@ public void evict(Class cls) { } - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Deprecations diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/DdlTypeHelper.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/DdlTypeHelper.java index 1e5be6ab186c..d8690ac17055 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/DdlTypeHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/DdlTypeHelper.java @@ -7,9 +7,7 @@ import java.lang.reflect.Type; import java.util.List; -import org.hibernate.dialect.Dialect; import org.hibernate.engine.jdbc.Size; -import org.hibernate.internal.build.AllowReflection; import org.hibernate.metamodel.mapping.JdbcMappingContainer; import org.hibernate.metamodel.mapping.SqlTypedMapping; import org.hibernate.metamodel.model.domain.DomainType; @@ -17,24 +15,20 @@ import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator; import org.hibernate.type.BasicType; import org.hibernate.type.descriptor.java.BasicPluralJavaType; -import org.hibernate.type.descriptor.sql.DdlType; -import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; import org.hibernate.type.internal.ParameterizedTypeImpl; import org.hibernate.type.spi.TypeConfiguration; public class DdlTypeHelper { @SuppressWarnings("unchecked") - @AllowReflection +// @AllowReflection public static BasicType resolveArrayType(DomainType elementType, TypeConfiguration typeConfiguration) { - @SuppressWarnings("unchecked") final var arrayJavaType = (BasicPluralJavaType) typeConfiguration.getJavaTypeRegistry() .resolveArrayDescriptor( elementType.getJavaType() ); - final Dialect dialect = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(); return arrayJavaType.resolveType( typeConfiguration, - dialect, + typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(), (BasicType) elementType, null, typeConfiguration.getCurrentBaseSqlTypeIndicators() @@ -43,19 +37,17 @@ public static BasicType resolveArrayType(DomainType elementType, TypeConfi @SuppressWarnings("unchecked") public static BasicType resolveListType(DomainType elementType, TypeConfiguration typeConfiguration) { - @SuppressWarnings("unchecked") - final BasicPluralJavaType arrayJavaType = + final var arrayJavaType = (BasicPluralJavaType) typeConfiguration.getJavaTypeRegistry() - .getDescriptor( List.class ) + .resolveDescriptor( List.class ) .createJavaType( - new ParameterizedTypeImpl( List.class, new Type[]{ elementType.getJavaType() }, null ), + new ParameterizedTypeImpl( List.class, new Type[] { elementType.getJavaType() }, null ), typeConfiguration ); - final Dialect dialect = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(); return arrayJavaType.resolveType( typeConfiguration, - dialect, + typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(), (BasicType) elementType, null, typeConfiguration.getCurrentBaseSqlTypeIndicators() @@ -79,11 +71,9 @@ public static String getTypeName(JdbcMappingContainer type, Size size, TypeConfi return AbstractSqlAstTranslator.getSqlTypeName( sqlTypedMapping, typeConfiguration ); } else { - final BasicType basicType = (BasicType) type.getSingleJdbcMapping(); - final DdlTypeRegistry ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); - final DdlType ddlType = ddlTypeRegistry.getDescriptor( - basicType.getJdbcType().getDdlTypeCode() - ); + final var basicType = (BasicType) type.getSingleJdbcMapping(); + final var ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); + final var ddlType = ddlTypeRegistry.getDescriptor( basicType.getJdbcType().getDdlTypeCode() ); return ddlType.getTypeName( size, basicType, ddlTypeRegistry ); } } @@ -97,11 +87,9 @@ public static String getTypeName(ReturnableType type, Size size, TypeConfigur return AbstractSqlAstTranslator.getSqlTypeName( sqlTypedMapping, typeConfiguration ); } else { - final BasicType basicType = (BasicType) ( (JdbcMappingContainer) type ).getSingleJdbcMapping(); - final DdlTypeRegistry ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); - final DdlType ddlType = ddlTypeRegistry.getDescriptor( - basicType.getJdbcType().getDdlTypeCode() - ); + final var basicType = (BasicType) ( (JdbcMappingContainer) type ).getSingleJdbcMapping(); + final var ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); + final var ddlType = ddlTypeRegistry.getDescriptor( basicType.getJdbcType().getDdlTypeCode() ); return ddlType.getTypeName( size, basicType, ddlTypeRegistry ); } } @@ -123,11 +111,9 @@ public static String getCastTypeName(JdbcMappingContainer type, Size size, TypeC return AbstractSqlAstTranslator.getCastTypeName( sqlTypedMapping, typeConfiguration ); } else { - final BasicType basicType = (BasicType) type.getSingleJdbcMapping(); - final DdlTypeRegistry ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); - final DdlType ddlType = ddlTypeRegistry.getDescriptor( - basicType.getJdbcType().getDdlTypeCode() - ); + final var basicType = (BasicType) type.getSingleJdbcMapping(); + final var ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); + final var ddlType = ddlTypeRegistry.getDescriptor( basicType.getJdbcType().getDdlTypeCode() ); return ddlType.getCastTypeName( size, basicType, ddlTypeRegistry ); } } @@ -141,11 +127,9 @@ public static String getCastTypeName(ReturnableType type, Size size, TypeConf return AbstractSqlAstTranslator.getCastTypeName( sqlTypedMapping, typeConfiguration ); } else { - final BasicType basicType = (BasicType) ( (JdbcMappingContainer) type ).getSingleJdbcMapping(); - final DdlTypeRegistry ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); - final DdlType ddlType = ddlTypeRegistry.getDescriptor( - basicType.getJdbcType().getDdlTypeCode() - ); + final var basicType = (BasicType) ( (JdbcMappingContainer) type ).getSingleJdbcMapping(); + final var ddlTypeRegistry = typeConfiguration.getDdlTypeRegistry(); + final var ddlType = ddlTypeRegistry.getDescriptor( basicType.getJdbcType().getDdlTypeCode() ); return ddlType.getCastTypeName( size, basicType, ddlTypeRegistry ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/JsonArrayViaElementArgumentReturnTypeResolver.java b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/JsonArrayViaElementArgumentReturnTypeResolver.java index ce7ed772650b..4ddb37bf909e 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/function/array/JsonArrayViaElementArgumentReturnTypeResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/function/array/JsonArrayViaElementArgumentReturnTypeResolver.java @@ -7,9 +7,7 @@ import java.util.List; import java.util.function.Supplier; -import org.hibernate.internal.build.AllowReflection; import org.hibernate.metamodel.mapping.BasicValuedMapping; -import org.hibernate.metamodel.mapping.MappingModelExpressible; import org.hibernate.metamodel.model.domain.DomainType; import org.hibernate.metamodel.model.domain.ReturnableType; import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver; @@ -20,7 +18,6 @@ import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.java.BasicPluralJavaType; import org.hibernate.type.descriptor.jdbc.DelegatingJdbcTypeIndicators; -import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators; import org.hibernate.type.spi.TypeConfiguration; import org.checkerframework.checker.nullness.qual.Nullable; @@ -44,12 +41,12 @@ public ReturnableType resolveFunctionReturnType( TypeConfiguration typeConfiguration) { if ( converter != null ) { if ( converter.isInTypeInference() ) { - // Don't default to a Json array when in type inference mode. + // Don't default to a JSON array when in type inference mode. // Comparing e.g. `array() = (select array_agg() ...)` will trigger this resolver // while inferring the type for `array()`, which we want to avoid. return null; } - final MappingModelExpressible inferredType = converter.resolveFunctionImpliedReturnType(); + final var inferredType = converter.resolveFunctionImpliedReturnType(); if ( inferredType != null ) { if ( inferredType instanceof ReturnableType returnableType ) { return returnableType; @@ -62,8 +59,8 @@ else if ( inferredType instanceof BasicValuedMapping basicValuedMapping ) { if ( impliedType != null ) { return impliedType; } - for ( SqmTypedNode argument : arguments ) { - final DomainType sqmType = argument.getExpressible().getSqmType(); + for ( var argument : arguments ) { + final var sqmType = argument.getExpressible().getSqmType(); if ( sqmType instanceof ReturnableType ) { return resolveJsonArrayType( sqmType, typeConfiguration ); } @@ -78,14 +75,14 @@ public BasicValuedMapping resolveFunctionReturnType( return null; } - @AllowReflection +// @AllowReflection public static BasicType resolveJsonArrayType(DomainType elementType, TypeConfiguration typeConfiguration) { @SuppressWarnings("unchecked") final var arrayJavaType = (BasicPluralJavaType) typeConfiguration.getJavaTypeRegistry() .resolveArrayDescriptor( elementType.getJavaType() ); - final JdbcTypeIndicators currentBaseSqlTypeIndicators = typeConfiguration.getCurrentBaseSqlTypeIndicators(); + final var currentBaseSqlTypeIndicators = typeConfiguration.getCurrentBaseSqlTypeIndicators(); return arrayJavaType.resolveType( typeConfiguration, currentBaseSqlTypeIndicators.getDialect(), diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/type/AbstractPostgreSQLStructJdbcType.java b/hibernate-core/src/main/java/org/hibernate/dialect/type/AbstractPostgreSQLStructJdbcType.java index e07a1483242f..d8ad146d8606 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/type/AbstractPostgreSQLStructJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/type/AbstractPostgreSQLStructJdbcType.java @@ -125,17 +125,13 @@ public EmbeddableMappingType getEmbeddableMappingType() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - if ( embeddableMappingType == null ) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Object[].class ); - } - else { - //noinspection unchecked - return (JavaType) embeddableMappingType.getMappedJavaType(); - } + return embeddableMappingType == null + ? typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Object[].class ) + : embeddableMappingType.getMappedJavaType(); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/type/DB2StructJdbcType.java b/hibernate-core/src/main/java/org/hibernate/dialect/type/DB2StructJdbcType.java index 7966480a4de6..e0672eab7bad 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/type/DB2StructJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/type/DB2StructJdbcType.java @@ -93,17 +93,13 @@ public String getStructTypeName() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - if ( embeddableMappingType == null ) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Object[].class ); - } - else { - //noinspection unchecked - return (JavaType) embeddableMappingType.getMappedJavaType(); - } + return embeddableMappingType == null + ? typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Object[].class ) + : embeddableMappingType.getMappedJavaType(); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleArrayJdbcTypeConstructor.java b/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleArrayJdbcTypeConstructor.java index 9b7b358806c6..990b5a929825 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleArrayJdbcTypeConstructor.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleArrayJdbcTypeConstructor.java @@ -54,7 +54,7 @@ public JdbcType resolveType( precision = columnTypeInformation.getColumnSize(); scale = columnTypeInformation.getDecimalDigits(); } - typeName = OracleArrayJdbcType.getTypeName( elementType.getJdbcRecommendedJavaTypeMapping( + typeName = OracleArrayJdbcType.getTypeName( elementType.getRecommendedJavaType( precision, scale, typeConfiguration diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleNestedTableJdbcTypeConstructor.java b/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleNestedTableJdbcTypeConstructor.java index 6bbae75b3305..a93e216dca83 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleNestedTableJdbcTypeConstructor.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/type/OracleNestedTableJdbcTypeConstructor.java @@ -48,7 +48,7 @@ public JdbcType resolveType( precision = columnTypeInformation.getColumnSize(); scale = columnTypeInformation.getDecimalDigits(); } - typeName = OracleArrayJdbcType.getTypeName( elementType.getJdbcRecommendedJavaTypeMapping( + typeName = OracleArrayJdbcType.getTypeName( elementType.getRecommendedJavaType( precision, scale, typeConfiguration diff --git a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java index 12e95883e97a..01354e2f124a 100644 --- a/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java +++ b/hibernate-core/src/main/java/org/hibernate/event/internal/DefaultLoadEventListener.java @@ -114,7 +114,7 @@ private boolean handleIdType(EntityPersister persister, LoadEvent event, LoadTyp parentIdTargetIdMapping instanceof CompositeIdentifierMapping compositeMapping ? compositeMapping.getMappedIdEmbeddableTypeDescriptor() : parentIdTargetIdMapping.getMappedType(); - if ( parentIdType.getMappedJavaType().getJavaTypeClass().isInstance( event.getEntityId() ) ) { + if ( parentIdType.getMappedJavaType().isInstance( event.getEntityId() ) ) { // yep that's what we have... loadByDerivedIdentitySimplePkValue( event, diff --git a/hibernate-core/src/main/java/org/hibernate/internal/util/type/PrimitiveWrapperHelper.java b/hibernate-core/src/main/java/org/hibernate/internal/util/type/PrimitiveWrapperHelper.java deleted file mode 100644 index d2e88c50ea20..000000000000 --- a/hibernate-core/src/main/java/org/hibernate/internal/util/type/PrimitiveWrapperHelper.java +++ /dev/null @@ -1,278 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.internal.util.type; - -/** - * Helper for primitive/wrapper utilities. - * - * @author Steve Ebersole - */ -public final class PrimitiveWrapperHelper { - private PrimitiveWrapperHelper() { - } - - /** - * Describes a particular primitive/wrapper combo - */ - public interface PrimitiveWrapperDescriptor { - Class getPrimitiveClass(); - Class getWrapperClass(); - } - - public static X cast(Class type, Object value) { - return type.isPrimitive() - ? getDescriptorByPrimitiveType( type ).getWrapperClass().cast( value ) - : type.cast( value ); - } - - public static boolean isInstance(Class type, Object value) { - return type.isPrimitive() - ? getDescriptorByPrimitiveType( type ).getWrapperClass().isInstance( value ) - : type.isInstance( value ); - } - - public static class BooleanDescriptor implements PrimitiveWrapperDescriptor { - public static final BooleanDescriptor INSTANCE = new BooleanDescriptor(); - - private BooleanDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return boolean.class; - } - - @Override - public Class getWrapperClass() { - return Boolean.class; - } - } - - public static class CharacterDescriptor implements PrimitiveWrapperDescriptor { - public static final CharacterDescriptor INSTANCE = new CharacterDescriptor(); - - private CharacterDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return char.class; - } - - @Override - public Class getWrapperClass() { - return Character.class; - } - } - - public static class ByteDescriptor implements PrimitiveWrapperDescriptor { - public static final ByteDescriptor INSTANCE = new ByteDescriptor(); - - private ByteDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return byte.class; - } - - @Override - public Class getWrapperClass() { - return Byte.class; - } - } - - public static class ShortDescriptor implements PrimitiveWrapperDescriptor { - public static final ShortDescriptor INSTANCE = new ShortDescriptor(); - - private ShortDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return short.class; - } - - @Override - public Class getWrapperClass() { - return Short.class; - } - } - - public static class IntegerDescriptor implements PrimitiveWrapperDescriptor { - public static final IntegerDescriptor INSTANCE = new IntegerDescriptor(); - - private IntegerDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return int.class; - } - - @Override - public Class getWrapperClass() { - return Integer.class; - } - } - - public static class LongDescriptor implements PrimitiveWrapperDescriptor { - public static final LongDescriptor INSTANCE = new LongDescriptor(); - - private LongDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return long.class; - } - - @Override - public Class getWrapperClass() { - return Long.class; - } - } - - public static class FloatDescriptor implements PrimitiveWrapperDescriptor { - public static final FloatDescriptor INSTANCE = new FloatDescriptor(); - - private FloatDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return float.class; - } - - @Override - public Class getWrapperClass() { - return Float.class; - } - } - - public static class DoubleDescriptor implements PrimitiveWrapperDescriptor { - public static final DoubleDescriptor INSTANCE = new DoubleDescriptor(); - - private DoubleDescriptor() { - } - - @Override - public Class getPrimitiveClass() { - return double.class; - } - - @Override - public Class getWrapperClass() { - return Double.class; - } - } - - @SuppressWarnings("unchecked") - public static PrimitiveWrapperDescriptor getDescriptorByPrimitiveType(Class primitiveClazz) { - if ( ! primitiveClazz.isPrimitive() ) { - throw new IllegalArgumentException( "Given class is not a primitive type : " + primitiveClazz.getName() ); - } - - if ( boolean.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) BooleanDescriptor.INSTANCE; - } - - if ( char.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) CharacterDescriptor.INSTANCE; - } - - if ( byte.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) ByteDescriptor.INSTANCE; - } - - if ( short.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) ShortDescriptor.INSTANCE; - } - - if ( int.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) IntegerDescriptor.INSTANCE; - } - - if ( long.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) LongDescriptor.INSTANCE; - } - - if ( float.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) FloatDescriptor.INSTANCE; - } - - if ( double.class == primitiveClazz ) { - return (PrimitiveWrapperDescriptor) DoubleDescriptor.INSTANCE; - } - - if ( void.class == primitiveClazz ) { - throw new IllegalArgumentException( "void, as primitive type, has no wrapper equivalent" ); - } - - throw new IllegalArgumentException( "Unrecognized primitive type class : " + primitiveClazz.getName() ); - } - - @SuppressWarnings("unchecked") - public static PrimitiveWrapperDescriptor getDescriptorByWrapperType(Class wrapperClass) { - if ( wrapperClass.isPrimitive() ) { - throw new IllegalArgumentException( "Given class is a primitive type : " + wrapperClass.getName() ); - } - - if ( Boolean.class.equals( wrapperClass ) ) { - return (PrimitiveWrapperDescriptor) BooleanDescriptor.INSTANCE; - } - - if ( Character.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) CharacterDescriptor.INSTANCE; - } - - if ( Byte.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) ByteDescriptor.INSTANCE; - } - - if ( Short.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) ShortDescriptor.INSTANCE; - } - - if ( Integer.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) IntegerDescriptor.INSTANCE; - } - - if ( Long.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) LongDescriptor.INSTANCE; - } - - if ( Float.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) FloatDescriptor.INSTANCE; - } - - if ( Double.class == wrapperClass ) { - return (PrimitiveWrapperDescriptor) DoubleDescriptor.INSTANCE; - } - - // most likely Void.class, which we can't really handle here - throw new IllegalArgumentException( "Unrecognized wrapper type class : " + wrapperClass.getName() ); - } - - public static boolean isWrapper(Class clazz) { - try { - getDescriptorByWrapperType( clazz ); - return true; - } - catch (Exception e) { - return false; - } - } - - public static boolean arePrimitiveWrapperEquivalents(Class converterDefinedType, Class propertyType) { - if ( converterDefinedType.isPrimitive() ) { - return getDescriptorByPrimitiveType( converterDefinedType ).getWrapperClass().equals( propertyType ); - } - else if ( propertyType.isPrimitive() ) { - return getDescriptorByPrimitiveType( propertyType ).getWrapperClass().equals( converterDefinedType ); - } - return false; - } -} diff --git a/hibernate-core/src/main/java/org/hibernate/internal/util/type/PrimitiveWrappers.java b/hibernate-core/src/main/java/org/hibernate/internal/util/type/PrimitiveWrappers.java new file mode 100644 index 000000000000..163f1c35caeb --- /dev/null +++ b/hibernate-core/src/main/java/org/hibernate/internal/util/type/PrimitiveWrappers.java @@ -0,0 +1,47 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.internal.util.type; + +/** + * Maps primitive types to their wrapper counterparts. + * + * @author Gavin King + */ +public final class PrimitiveWrappers { + + public static Class canonicalize(Class type) { + if ( type.isPrimitive() ) { + @SuppressWarnings("unchecked") + // completely safe, boolean.class is a Class + final var wrapperClass = (Class) wrapperClass( type ); + return wrapperClass; + } + else { + return type; + } + } + + private static Class wrapperClass(Class primitiveClass) { + return switch ( primitiveClass.getName() ) { + case "boolean" -> Boolean.class; + case "char" -> Character.class; + case "byte" -> Byte.class; + case "short" -> Short.class; + case "int" -> Integer.class; + case "long" -> Long.class; + case "float" -> Float.class; + case "double" -> Double.class; + default -> throw new AssertionError( "Unknown primitive type: " + primitiveClass ); + }; + } + + public static X cast(Class type, Object value) { + return canonicalize( type ).cast( value ); + } + + public static boolean isInstance(Class type, Object value) { + return canonicalize( type ).isInstance( value ); + } +} diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java b/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java index ff4db8c1906e..c1ca154ec5e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java @@ -612,14 +612,14 @@ public Boolean convertToEntityAttribute(Boolean relationalValue) { } } - private Resolution resolution(BasicJavaType explicitJavaType, JavaType javaType) { - final JavaType basicJavaType; + private Resolution resolution(BasicJavaType explicitJavaType, JavaType javaType) { + final JavaType basicJavaType; final JdbcType jdbcType; if ( explicitJdbcTypeAccess != null ) { final var typeConfiguration = getTypeConfiguration(); jdbcType = explicitJdbcTypeAccess.apply( typeConfiguration ); basicJavaType = javaType == null && jdbcType != null - ? jdbcType.getJdbcRecommendedJavaTypeMapping( null, null, typeConfiguration ) + ? jdbcType.getRecommendedJavaType( null, null, typeConfiguration ) : javaType; } else { @@ -630,7 +630,7 @@ private Resolution resolution(BasicJavaType explicitJavaType, JavaType throw new MappingException( "Unable to determine JavaType to use : " + this ); } - if ( basicJavaType instanceof BasicJavaType castType + if ( basicJavaType instanceof BasicJavaType castType && ( !basicJavaType.getJavaTypeClass().isEnum() || enumerationStyle == null ) ) { final var context = getBuildingContext(); final var autoAppliedTypeDef = context.getTypeDefinitionRegistry().resolveAutoApplied( castType ); @@ -779,7 +779,7 @@ private JavaType specialJavaType( return xmlJavaType; } } - return javaTypeRegistry.getDescriptor( impliedJavaType ); + return javaTypeRegistry.resolveDescriptor( impliedJavaType ); } private MutabilityPlan mutabilityPlan( diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EmbeddableRepresentationStrategyPojo.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EmbeddableRepresentationStrategyPojo.java index ff64b3d31b40..9c345ec97b82 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EmbeddableRepresentationStrategyPojo.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/EmbeddableRepresentationStrategyPojo.java @@ -120,13 +120,13 @@ public EmbeddableRepresentationStrategyPojo( } } - private static JavaType resolveEmbeddableJavaType( + private static JavaType resolveEmbeddableJavaType( Component bootDescriptor, CompositeUserType compositeUserType, RuntimeModelCreationContext creationContext) { final var javaTypeRegistry = creationContext.getTypeConfiguration().getJavaTypeRegistry(); return compositeUserType == null - ? javaTypeRegistry.getDescriptor( bootDescriptor.getComponentClass() ) + ? javaTypeRegistry.resolveDescriptor( bootDescriptor.getComponentClass() ) : javaTypeRegistry.resolveDescriptor( compositeUserType.returnedClass(), () -> new CompositeUserTypeJavaTypeWrapper<>( compositeUserType ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java index f8910b60e35d..f647a84a9aa4 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleNaturalIdMapping.java @@ -115,7 +115,7 @@ public void validateInternalForm(Object naturalIdValue) { } } - if ( !getJavaType().getJavaTypeClass().isInstance( naturalIdValue ) ) { + if ( !getJavaType().isInstance( naturalIdValue ) ) { throw new IllegalArgumentException( String.format( Locale.ROOT, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java index 30887186f042..e6853604cd6c 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java @@ -35,6 +35,7 @@ import org.hibernate.metamodel.model.domain.JpaMetamodel; import org.hibernate.metamodel.model.domain.ManagedDomainType; import org.hibernate.metamodel.model.domain.NavigableRole; +import org.hibernate.query.sqm.tree.domain.SqmManagedDomainType; import org.hibernate.type.BindingContext; import org.hibernate.query.sqm.tuple.TupleType; import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor; @@ -113,12 +114,12 @@ public class MappingMetamodelImpl // - ignoring Hibernate's representation mode (entity mode), the Class // object for an entity (or mapped superclass) always refers to the same // JPA EntityType and Hibernate EntityPersister. The problem arises with - // embeddables. For an embeddable, as with the rest of its metamodel, + // embeddables. For an embeddable type, as with the rest of its metamodel, // Hibernate combines the embeddable's relational/mapping while JPA does // not. This is perfectly consistent with each paradigm. But it results // in a mismatch since JPA expects a single "type descriptor" for a - // given embeddable class while Hibernate incorporates the - // relational/mapping info so we have a "type descriptor" for each usage + // given embeddable class, while Hibernate incorporates the + // relational/mapping info, so we have a "type descriptor" for each usage // of that embeddable type. (Think embeddable versus embedded.) // // To account for this, we track both paradigms here. @@ -258,11 +259,9 @@ private void processBootCollections( for ( final var model : collectionBindings ) { final String role = model.getRole(); final var persister = - persisterFactory.createCollectionPersister( - model, + persisterFactory.createCollectionPersister( model, cacheImplementor.getCollectionRegionAccess( new NavigableRole( role ) ), - modelCreationContext - ); + modelCreationContext ); collectionPersisterMap.put( role, persister ); if ( persister.getIndexType() instanceof org.hibernate.type.EntityType entityType ) { registerEntityParticipant( entityType, persister ); @@ -360,32 +359,29 @@ public boolean isEntityClass(Class entityJavaType) { @Override public EntityPersister getEntityDescriptor(Class entityJavaType) { - var entityPersister = entityPersisterMap.get( entityJavaType.getName() ); - if ( entityPersister == null ) { - final String mappedEntityName = entityProxyInterfaceMap.get( entityJavaType ); - if ( mappedEntityName != null ) { - entityPersister = entityPersisterMap.get( mappedEntityName ); - } - } - if ( entityPersister == null ) { - throw new UnknownEntityTypeException( entityJavaType ); - } - return entityPersister; + return getEntityPersister( entityJavaType ); } @Override @Deprecated(forRemoval = true) @SuppressWarnings( "removal" ) public EntityPersister locateEntityDescriptor(Class byClass) { - var entityPersister = entityPersisterMap.get( byClass.getName() ); - if ( entityPersister == null ) { + return getEntityPersister( byClass ); + } + + private EntityPersister getEntityPersister(Class byClass) { + final var entityPersister = entityPersisterMap.get( byClass.getName() ); + if ( entityPersister != null ) { + return entityPersister; + } + else { final String mappedEntityName = entityProxyInterfaceMap.get( byClass ); if ( mappedEntityName != null ) { - entityPersister = entityPersisterMap.get( mappedEntityName ); + final var persister = entityPersisterMap.get( mappedEntityName ); + if ( persister != null ) { + return persister; + } } - } - if ( entityPersister == null ) { throw new UnknownEntityTypeException( byClass ); } - return entityPersister; } @Override @@ -644,7 +640,7 @@ public String[] getAllCollectionRoles() { public @Nullable BindableType resolveParameterBindType(Class javaType) { final var typeConfiguration = getTypeConfiguration(); - final BasicType basicType = typeConfiguration.getBasicTypeForJavaType( javaType ); + final var basicType = typeConfiguration.getBasicTypeForJavaType( javaType ); // For enums, we simply don't know the exact mapping if there is no basic type registered if ( basicType != null || javaType.isEnum() ) { return basicType; @@ -652,7 +648,7 @@ public String[] getAllCollectionRoles() { final var managedType = jpaMetamodel.findManagedType( javaType ); if ( managedType != null ) { - return (BindableType) managedType; + return (SqmManagedDomainType) managedType; } final var javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); @@ -685,12 +681,12 @@ public String[] getAllCollectionRoles() { return null; } - final Class clazz = unproxiedClass( bindValue ); - - // Resolve superclass bindable type if necessary, as we don't register types for e.g. Inet4Address + final var clazz = unproxiedClass( bindValue ); + // Resolve the superclass bindable type if necessary, + // as we don't register types for e.g. Inet4Address Class c = clazz; do { - final BindableType type = resolveParameterBindType( c ); + final var type = resolveParameterBindType( c ); if ( type != null ) { return type; } diff --git a/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java b/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java index 887f9ecdc258..2de0be02215b 100644 --- a/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java @@ -67,7 +67,7 @@ private OutputableType getOrmType(SharedSessionContractImplementor persistenc final var typeConfiguration = persistenceContext.getFactory().getTypeConfiguration(); final var javaType = typeConfiguration.getJdbcTypeRegistry().getDescriptor( getJdbcTypeCode() ) - .getJdbcRecommendedJavaTypeMapping( null, null, typeConfiguration ); + .getRecommendedJavaType( null, null, typeConfiguration ); final var basicType = typeConfiguration.standardBasicTypeForJavaType( javaType.getJavaTypeClass() ); //noinspection unchecked diff --git a/hibernate-core/src/main/java/org/hibernate/query/specification/internal/ProjectionSpecificationImpl.java b/hibernate-core/src/main/java/org/hibernate/query/specification/internal/ProjectionSpecificationImpl.java index 07fb2d33babc..e97c3e821e31 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/specification/internal/ProjectionSpecificationImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/specification/internal/ProjectionSpecificationImpl.java @@ -31,7 +31,7 @@ import java.util.Map; import java.util.function.BiFunction; -import static org.hibernate.internal.util.type.PrimitiveWrapperHelper.cast; +import static org.hibernate.internal.util.type.PrimitiveWrappers.cast; /** * @author Gavin King diff --git a/hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeQueryImpl.java b/hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeQueryImpl.java index 806fb177c50a..6fae0b5323e3 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeQueryImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeQueryImpl.java @@ -127,7 +127,7 @@ import static org.hibernate.internal.util.collections.CollectionHelper.makeCopy; import static org.hibernate.internal.util.collections.CollectionHelper.toSmallList; import static org.hibernate.internal.util.collections.CollectionHelper.toSmallMap; -import static org.hibernate.internal.util.type.PrimitiveWrapperHelper.getDescriptorByPrimitiveType; +import static org.hibernate.internal.util.type.PrimitiveWrappers.canonicalize; import static org.hibernate.jpa.HibernateHints.HINT_NATIVE_LOCK_MODE; import static org.hibernate.query.results.internal.Builders.resultClassBuilder; import static org.hibernate.query.results.ResultSetMapping.resolveResultSetMapping; @@ -384,11 +384,7 @@ private boolean validConstructorFoundForResultType(Class resultType, ResultSe } private static boolean constructorParameterMatches(ResultBuilder resultBuilder, Class paramType) { - final var parameterClass = - paramType.isPrimitive() - ? getDescriptorByPrimitiveType( paramType ).getWrapperClass() - : paramType; - return resultBuilder.getJavaType() == parameterClass; + return resultBuilder.getJavaType() == canonicalize( paramType ); } protected void setTupleTransformerForResultType(Class resultClass) { diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java index 0bcb51539151..c789c4911cef 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/internal/TypecheckUtil.java @@ -36,6 +36,7 @@ import java.time.temporal.TemporalAmount; import java.util.Objects; +import static org.hibernate.internal.util.type.PrimitiveWrappers.canonicalize; import static org.hibernate.type.descriptor.java.JavaTypeHelper.isUnknown; /** @@ -383,20 +384,6 @@ private static boolean isConvertedType(SqmExpressible type) { return type.getSqmType() instanceof ConvertedBasicType; } - private static Class canonicalize(Class lhs) { - return switch (lhs.getCanonicalName()) { - case "boolean" -> Boolean.class; - case "byte" -> Byte.class; - case "short" -> Short.class; - case "int" -> Integer.class; - case "long" -> Long.class; - case "float" -> Float.class; - case "double" -> Double.class; - case "char" -> Character.class; - default -> lhs; - }; - } - private static boolean isMappedSuperclassTypeAssignable( MappedSuperclassDomainType lhsType, EntityType rhsType, diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java index 35ad112e177b..9f98cd259fca 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java @@ -105,7 +105,6 @@ import org.hibernate.query.sqm.CastType; import org.hibernate.query.sqm.ComparisonOperator; import org.hibernate.query.sqm.DiscriminatorSqmPath; -import org.hibernate.query.sqm.DynamicInstantiationNature; import org.hibernate.query.sqm.InterpretationException; import org.hibernate.query.sqm.SqmBindableType; import org.hibernate.query.sqm.SqmExpressible; @@ -252,7 +251,6 @@ import org.hibernate.query.sqm.tree.predicate.SqmWhereClause; import org.hibernate.query.sqm.tree.select.SqmAliasedNode; import org.hibernate.query.sqm.tree.select.SqmDynamicInstantiation; -import org.hibernate.query.sqm.tree.select.SqmDynamicInstantiationArgument; import org.hibernate.query.sqm.tree.select.SqmDynamicInstantiationTarget; import org.hibernate.query.sqm.tree.select.SqmJpaCompoundSelection; import org.hibernate.query.sqm.tree.select.SqmOrderByClause; @@ -1632,12 +1630,12 @@ public Values visitValues(SqmValues sqmValues) { @Override public SelectStatement visitSelectStatement(SqmSelectStatement statement) { - final CteContainer oldCteContainer = cteContainer; - final CteContainer cteContainer = this.visitCteContainer( statement ); - final SqmStatement oldSqmStatement = this.currentSqmStatement; + final var oldCteContainer = cteContainer; + final var cteContainer = this.visitCteContainer( statement ); + final var oldSqmStatement = this.currentSqmStatement; this.currentSqmStatement = statement; - final QueryPart queryPart = visitQueryPart( statement.getQueryPart() ); + final var queryPart = visitQueryPart( statement.getQueryPart() ); final List> domainResults = queryPart.isRoot() ? this.domainResults : emptyList(); try { return new SelectStatement( cteContainer, queryPart, domainResults ); @@ -1651,30 +1649,24 @@ public SelectStatement visitSelectStatement(SqmSelectStatement statement) { @Override public DynamicInstantiation visitDynamicInstantiation(SqmDynamicInstantiation sqmDynamicInstantiation) { - final SqmDynamicInstantiationTarget instantiationTarget = sqmDynamicInstantiation.getInstantiationTarget(); - final DynamicInstantiationNature instantiationNature = instantiationTarget.getNature(); - final JavaType targetTypeDescriptor = interpretInstantiationTarget( instantiationTarget ); - - final DynamicInstantiation dynamicInstantiation = - new DynamicInstantiation<>( instantiationNature, targetTypeDescriptor ); - - for ( SqmDynamicInstantiationArgument sqmArgument : sqmDynamicInstantiation.getArguments() ) { + final var instantiationTarget = sqmDynamicInstantiation.getInstantiationTarget(); + final var dynamicInstantiation = + new DynamicInstantiation<>( instantiationTarget.getNature(), + interpretInstantiationTarget( instantiationTarget ) ); + for ( var sqmArgument : sqmDynamicInstantiation.getArguments() ) { if ( sqmArgument.getSelectableNode() instanceof SqmPath sqmPath ) { prepareForSelection( sqmPath ); } - final DomainResultProducer argumentResultProducer = (DomainResultProducer) sqmArgument.accept( this ); - - dynamicInstantiation.addArgument( sqmArgument.getAlias(), argumentResultProducer, this ); + dynamicInstantiation.addArgument( sqmArgument.getAlias(), + (DomainResultProducer) sqmArgument.accept( this ) ); } - dynamicInstantiation.complete(); - return dynamicInstantiation; } - private JavaType interpretInstantiationTarget(SqmDynamicInstantiationTarget instantiationTarget) { + private JavaType interpretInstantiationTarget(SqmDynamicInstantiationTarget instantiationTarget) { return getCreationContext().getTypeConfiguration().getJavaTypeRegistry() - .getDescriptor( switch ( instantiationTarget.getNature() ) { + .resolveDescriptor( switch ( instantiationTarget.getNature() ) { case LIST -> List.class; case MAP -> Map.class; default -> instantiationTarget.getJavaType(); diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResultAssembler.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResultAssembler.java index c25dee2ac2bf..6a6937281095 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResultAssembler.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/basic/BasicResultAssembler.java @@ -60,7 +60,7 @@ public J assemble( if ( valueConverter != null ) { if ( jdbcValue != null ) { // the raw value type should be the converter's relational-JTD - if ( ! valueConverter.getRelationalJavaType().getJavaTypeClass().isInstance( jdbcValue ) ) { + if ( ! valueConverter.getRelationalJavaType().isInstance( jdbcValue ) ) { throw new HibernateException( String.format( Locale.ROOT, diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityInitializerImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityInitializerImpl.java index 068253ec19a6..352262529287 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityInitializerImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/entity/internal/EntityInitializerImpl.java @@ -1154,6 +1154,8 @@ private void resolveEntity(EntityInitializerData data, Object proxy) { public void resolveInstance(EntityInitializerData data) { if ( data.getState() == State.KEY_RESOLVED ) { final var rowProcessingState = data.getRowProcessingState(); + final var session = rowProcessingState.getSession(); + final var persistenceContext = session.getPersistenceContextInternal(); data.setState( State.RESOLVED ); if ( data.entityKey == null ) { assert identifierAssembler != null; @@ -1165,7 +1167,7 @@ public void resolveInstance(EntityInitializerData data) { resolveEntityKey( data, id ); } data.entityHolder = - rowProcessingState.getSession().getPersistenceContextInternal() + persistenceContext .claimEntityHolderIfPossible( data.entityKey, null, @@ -1179,7 +1181,6 @@ public void resolveInstance(EntityInitializerData data) { else { resolveEntityInstance1( data ); if ( data.uniqueKeyAttributePath != null ) { - final var session = rowProcessingState.getSession(); final var concreteDescriptor = getConcreteDescriptor( data ); final var entityUniqueKey = new EntityUniqueKey( concreteDescriptor.getEntityName(), @@ -1188,8 +1189,7 @@ public void resolveInstance(EntityInitializerData data) { data.uniqueKeyPropertyTypes[concreteDescriptor.getSubclassId()], session.getFactory() ); - session.getPersistenceContextInternal() - .addEntity( entityUniqueKey, data.getInstance() ); + persistenceContext.addEntity( entityUniqueKey, data.getInstance() ); } } @@ -1346,7 +1346,10 @@ protected void upgradeLockMode(EntityInitializerData data) { protected boolean isProxyInstance(Object proxy) { return proxy != null && ( proxy instanceof MapProxy - || entityDescriptor.getJavaType().getJavaTypeClass().isInstance( proxy ) ); + // do NOT use JavaType.isInstance() here; we're testing if the + // proxy itself is an instance of the given entity type, not if + // the underlying entity implementation is an instance + || entityDescriptor.getJavaType().getJavaTypeClass().isInstance( proxy ) ); } private boolean isExistingEntityInitialized(Object existingEntity) { diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiation.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiation.java index 6ebfd95a82f0..6ca2cb334c34 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiation.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiation.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.hibernate.query.sqm.DynamicInstantiationNature; import org.hibernate.query.sqm.sql.ConversionException; @@ -18,17 +17,19 @@ import org.jboss.logging.Logger; +import static java.util.stream.Collectors.toList; + /** * Represents a dynamic-instantiation (from an SQM query) as a DomainResultProducer * * @author Steve Ebersole */ -public class DynamicInstantiation implements DomainResultProducer { +public class DynamicInstantiation implements DomainResultProducer { private static final Logger LOG = Logger.getLogger( DynamicInstantiation.class ); private final DynamicInstantiationNature nature; private final JavaType targetJavaType; - private List arguments; + private List> arguments; private boolean argumentAdditionsComplete = false; @@ -47,7 +48,7 @@ public JavaType getTargetJavaType() { return targetJavaType; } - public void addArgument(String alias, DomainResultProducer argumentResultProducer, DomainResultCreationState creationState) { + public void addArgument(String alias, DomainResultProducer argumentResultProducer) { if ( argumentAdditionsComplete ) { throw new ConversionException( "Unexpected call to DynamicInstantiation#addAgument after previously complete" ); } @@ -82,7 +83,7 @@ public void complete() { argumentAdditionsComplete = true; } - public List getArguments() { + public List> getArguments() { return arguments; } @@ -92,17 +93,16 @@ public String toString() { } @Override - public DomainResult createDomainResult( + public DomainResult createDomainResult( String resultVariable, DomainResultCreationState creationState) { - //noinspection unchecked - return new DynamicInstantiationResultImpl( + return new DynamicInstantiationResultImpl<>( resultVariable, getNature(), getTargetJavaType(), getArguments().stream() .map( argument -> argument.buildArgumentDomainResult( creationState ) ) - .collect( Collectors.toList() ) + .collect( toList() ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationArgument.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationArgument.java index 2d1f5d5438ec..cb5677668f48 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationArgument.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationArgument.java @@ -6,7 +6,6 @@ import org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter; import org.hibernate.query.sqm.sql.internal.DomainResultProducer; -import org.hibernate.sql.ast.spi.SqlExpressionResolver; import org.hibernate.sql.results.graph.DomainResultCreationState; /** @@ -26,9 +25,9 @@ public String getAlias() { } public ArgumentDomainResult buildArgumentDomainResult(DomainResultCreationState creationState) { - final SqlExpressionResolver sqlExpressionResolver = creationState.getSqlAstCreationState() - .getCurrentProcessingState() - .getSqlExpressionResolver(); + final var sqlExpressionResolver = + creationState.getSqlAstCreationState().getCurrentProcessingState() + .getSqlExpressionResolver(); if ( sqlExpressionResolver instanceof BaseSqmToSqlAstConverter.SqmAliasedNodeCollector ) { if ( !( argumentResultProducer instanceof DynamicInstantiation ) ) { ( (BaseSqmToSqlAstConverter.SqmAliasedNodeCollector) sqlExpressionResolver ).next(); diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerConstructorImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerConstructorImpl.java index 99a90e91f6a1..7e411f7429e7 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerConstructorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerConstructorImpl.java @@ -40,7 +40,7 @@ public JavaType getAssembledJavaType() { @Override public R assemble(RowProcessingState rowProcessingState) { final int numberOfArgs = argumentReaders.size(); - Object[] args = new Object[ numberOfArgs ]; + final var args = new Object[ numberOfArgs ]; for ( int i = 0; i < numberOfArgs; i++ ) { args[i] = argumentReaders.get( i ).assemble( rowProcessingState ); } @@ -60,14 +60,14 @@ public R assemble(RowProcessingState rowProcessingState) { @Override public void resolveState(RowProcessingState rowProcessingState) { - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { argumentReader.resolveState( rowProcessingState ); } } @Override public void forEachResultAssembler(BiConsumer, X> consumer, X arg) { - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { argumentReader.forEachResultAssembler( consumer, arg ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerInjectionImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerInjectionImpl.java index cd842c71c7b3..d3b298e0b9b0 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerInjectionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerInjectionImpl.java @@ -5,11 +5,7 @@ package org.hibernate.sql.results.graph.instantiation.internal; import java.beans.BeanInfo; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.function.BiConsumer; @@ -35,7 +31,7 @@ public DynamicInstantiationAssemblerInjectionImpl( JavaType target, List> argumentReaders) { this.target = target; - final Class targetJavaType = target.getJavaTypeClass(); + final var targetJavaType = target.getJavaTypeClass(); final List beanInjections = new ArrayList<>( argumentReaders.size() ); BeanInfoHelper.visitBeanInfo( targetJavaType, @@ -58,20 +54,20 @@ private DynamicInstantiationAssemblerInjectionImpl(List beanInjec } private static BeanInjection injection(BeanInfo beanInfo, ArgumentReader argument, Class targetJavaType) { - final Class argType = argument.getAssembledJavaType().getJavaTypeClass(); + final var argType = argument.getAssembledJavaType().getJavaTypeClass(); final String alias = argument.getAlias(); // see if we can find a property with the given name... - for ( PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors() ) { + for ( var propertyDescriptor : beanInfo.getPropertyDescriptors() ) { if ( propertyMatches( alias, argType, propertyDescriptor ) ) { - final Method setter = propertyDescriptor.getWriteMethod(); + final var setter = propertyDescriptor.getWriteMethod(); setter.setAccessible(true); return new BeanInjection( new BeanInjectorSetter<>( setter ), argument ); } } // see if we can find a Field with the given name... - final Field field = findField( targetJavaType, alias, argType ); + final var field = findField( targetJavaType, alias, argType ); if ( field != null ) { return new BeanInjection( new BeanInjectorField<>( field ), argument ); } @@ -92,7 +88,7 @@ public JavaType getAssembledJavaType() { public T assemble(RowProcessingState rowProcessingState) { final T result; try { - final Constructor constructor = target.getJavaTypeClass().getDeclaredConstructor(); + final var constructor = target.getJavaTypeClass().getDeclaredConstructor(); constructor.setAccessible( true ); result = constructor.newInstance(); } @@ -101,7 +97,7 @@ public T assemble(RowProcessingState rowProcessingState) { throw new InstantiationException( "Error instantiating class '" + target.getTypeName() + "' using default constructor: " + e.getMessage(), e ); } - for ( BeanInjection beanInjection : beanInjections ) { + for ( var beanInjection : beanInjections ) { final Object assembled = beanInjection.getValueAssembler().assemble( rowProcessingState ); beanInjection.getBeanInjector().inject( result, assembled ); } @@ -110,14 +106,14 @@ public T assemble(RowProcessingState rowProcessingState) { @Override public void resolveState(RowProcessingState rowProcessingState) { - for ( BeanInjection beanInjection : beanInjections ) { + for ( var beanInjection : beanInjections ) { beanInjection.getValueAssembler().resolveState( rowProcessingState ); } } @Override public void forEachResultAssembler(BiConsumer, X> consumer, X arg) { - for ( BeanInjection beanInjection : beanInjections ) { + for ( var beanInjection : beanInjections ) { beanInjection.getValueAssembler().forEachResultAssembler( consumer, arg ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerListImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerListImpl.java index ff44cbf5fb12..da4ad30545a2 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerListImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerListImpl.java @@ -41,7 +41,7 @@ public JavaType> getAssembledJavaType() { public List assemble( RowProcessingState rowProcessingState) { final ArrayList result = new ArrayList<>(); - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { result.add( argumentReader.assemble( rowProcessingState ) ); } return result; @@ -49,14 +49,14 @@ public List assemble( @Override public void resolveState(RowProcessingState rowProcessingState) { - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { argumentReader.resolveState( rowProcessingState ); } } @Override public void forEachResultAssembler(BiConsumer, X> consumer, X arg) { - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { argumentReader.forEachResultAssembler( consumer, arg ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerMapImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerMapImpl.java index e6c5b1a34149..7252811a6764 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerMapImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationAssemblerMapImpl.java @@ -33,7 +33,7 @@ public DynamicInstantiationAssemblerMapImpl( this.argumentReaders = argumentReaders; final Set aliases = new HashSet<>(); - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { if ( argumentReader.getAlias() == null ) { throw new IllegalStateException( "alias for Map dynamic instantiation argument cannot be null" ); } @@ -60,20 +60,16 @@ public JavaType> getAssembledJavaType() { public Map assemble( RowProcessingState rowProcessingState) { final HashMap result = new HashMap<>(); - - for ( ArgumentReader argumentReader : argumentReaders ) { - result.put( - argumentReader.getAlias(), - argumentReader.assemble( rowProcessingState ) - ); + for ( var argumentReader : argumentReaders ) { + result.put( argumentReader.getAlias(), + argumentReader.assemble( rowProcessingState ) ); } - return result; } @Override public void resolveState(RowProcessingState rowProcessingState) { - for ( ArgumentReader argumentReader : argumentReaders ) { + for ( var argumentReader : argumentReaders ) { argumentReader.resolveState( rowProcessingState ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationResultImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationResultImpl.java index 3bee263d66d4..58ac3dd808e1 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationResultImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/DynamicInstantiationResultImpl.java @@ -4,7 +4,6 @@ */ package org.hibernate.sql.results.graph.instantiation.internal; -import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.BitSet; import java.util.HashSet; @@ -19,7 +18,6 @@ import org.hibernate.sql.results.graph.InitializerParent; import org.hibernate.sql.results.graph.instantiation.DynamicInstantiationResult; import org.hibernate.type.descriptor.java.JavaType; -import org.hibernate.type.spi.TypeConfiguration; import org.jboss.logging.Logger; @@ -63,7 +61,7 @@ public String getResultVariable() { public boolean containsAnyNonScalarResults() { //noinspection ForLoopReplaceableByForEach for ( int i = 0; i < argumentResults.size(); i++ ) { - final ArgumentDomainResult argumentResult = argumentResults.get( i ); + final var argumentResult = argumentResults.get( i ); if ( argumentResult.containsAnyNonScalarResults() ) { return true; } @@ -74,7 +72,7 @@ public boolean containsAnyNonScalarResults() { @Override public void collectValueIndexesToCache(BitSet valueIndexes) { - for ( ArgumentDomainResult argumentResult : argumentResults ) { + for ( var argumentResult : argumentResults ) { argumentResult.collectValueIndexesToCache( valueIndexes ); } } @@ -88,7 +86,7 @@ public DomainResultAssembler createResultAssembler(InitializerParent paren final List> argumentReaders = new ArrayList<>(); if ( argumentResults != null ) { - for ( ArgumentDomainResult argumentResult : argumentResults ) { + for ( var argumentResult : argumentResults ) { final String argumentAlias = argumentResult.getResultVariable(); if ( argumentAlias == null ) { areAllArgumentsAliased = false; @@ -155,19 +153,15 @@ private DomainResultAssembler assembler( List duplicatedAliases, List> argumentReaders, AssemblerCreationState creationState) { - final List> argumentTypes = + // find a constructor matching argument types + final var constructor = findMatchingConstructor( + javaType.getJavaTypeClass(), argumentReaders.stream() - .map(reader -> reader.getAssembledJavaType().getJavaTypeClass()) - .collect(toList()); - final TypeConfiguration typeConfiguration = + .map( reader -> reader.getAssembledJavaType().getJavaTypeClass() ) + .collect( toList() ), creationState.getSqlAstCreationContext() .getMappingMetamodel() - .getTypeConfiguration(); - // find a constructor matching argument types - final Constructor constructor = findMatchingConstructor( - javaType.getJavaTypeClass(), - argumentTypes, - typeConfiguration + .getTypeConfiguration() ); if ( constructor != null ) { constructor.setAccessible( true ); diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/InstantiationHelper.java b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/InstantiationHelper.java index faa0bf5813c2..48c33a6ef997 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/InstantiationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/graph/instantiation/internal/InstantiationHelper.java @@ -13,7 +13,6 @@ import java.beans.PropertyDescriptor; import java.lang.reflect.Constructor; import java.lang.reflect.Field; -import java.lang.reflect.Type; import java.util.List; import static org.hibernate.query.sqm.tree.expression.Compatibility.areAssignmentCompatible; @@ -47,7 +46,7 @@ public static boolean isInjectionCompatible(Class targetJavaType, List targetJavaType, BeanInfo beanInfo, String alias, Class argType) { - for ( PropertyDescriptor propertyDescriptor : beanInfo.getPropertyDescriptors() ) { + for ( var propertyDescriptor : beanInfo.getPropertyDescriptors() ) { if ( propertyMatches( alias, argType, propertyDescriptor ) ) { return true; } @@ -63,7 +62,7 @@ public static boolean isConstructorCompatible(Class javaClass, List> Class type, List> argumentTypes, TypeConfiguration typeConfiguration) { - for ( final Constructor constructor : type.getDeclaredConstructors() ) { + for ( var constructor : type.getDeclaredConstructors() ) { if ( isConstructorCompatible( constructor, argumentTypes, typeConfiguration ) ) { //noinspection unchecked return (Constructor) constructor; @@ -79,12 +78,12 @@ public static boolean isConstructorCompatible( final var genericParameterTypes = constructor.getGenericParameterTypes(); if ( genericParameterTypes.length == argumentTypes.size() ) { for (int i = 0; i < argumentTypes.size(); i++ ) { - final Type parameterType = genericParameterTypes[i]; + final var parameterType = genericParameterTypes[i]; final var argumentType = argumentTypes.get( i ); final var type = parameterType instanceof Class classParameter ? classParameter - : typeConfiguration.getJavaTypeRegistry().getDescriptor( parameterType ) + : typeConfiguration.getJavaTypeRegistry().resolveDescriptor( parameterType ) .getJavaTypeClass(); if ( !areAssignmentCompatible( type, argumentType ) ) { if ( LOG.isDebugEnabled() ) { @@ -107,7 +106,7 @@ public static boolean isConstructorCompatible( static Field findField(Class declaringClass, String name, Class javaType) { try { - final Field field = declaringClass.getDeclaredField( name ); + final var field = declaringClass.getDeclaredField( name ); // field should never be null if ( areAssignmentCompatible( field.getType(), javaType ) ) { field.setAccessible( true ); diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/internal/TupleImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/internal/TupleImpl.java index f11ce68c3f5c..d53ed305f766 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/internal/TupleImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/internal/TupleImpl.java @@ -10,8 +10,8 @@ import jakarta.persistence.Tuple; import jakarta.persistence.TupleElement; -import static org.hibernate.internal.util.type.PrimitiveWrapperHelper.cast; -import static org.hibernate.internal.util.type.PrimitiveWrapperHelper.isInstance; +import static org.hibernate.internal.util.type.PrimitiveWrappers.cast; +import static org.hibernate.internal.util.type.PrimitiveWrappers.isInstance; /** * Implementation of the JPA Tuple contract diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/AbstractResultSetAccess.java b/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/AbstractResultSetAccess.java index 800fe88ef3a6..2154f395915c 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/AbstractResultSetAccess.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/AbstractResultSetAccess.java @@ -123,11 +123,12 @@ public BasicType resolveType(int position, JavaType explicitJavaType, ? resolvedJdbcType : jdbcType( explicitJavaType, resolvedJdbcType, length, precision, scale, typeConfiguration ); // If there is an explicit JavaType, then prefer its recommended JDBC type - final JavaType javaType = + final var javaType = explicitJavaType == null - ? jdbcType.getJdbcRecommendedJavaTypeMapping( length, scale, typeConfiguration ) + ? jdbcType.getRecommendedJavaType( length, scale, typeConfiguration ) : explicitJavaType; - return typeConfiguration.getBasicTypeRegistry().resolve( javaType, jdbcType ); + return typeConfiguration.getBasicTypeRegistry() + .resolve( (JavaType) javaType, jdbcType ); } catch (SQLException e) { throw getSqlExceptionHelper() diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/spi/ListResultsConsumer.java b/hibernate-core/src/main/java/org/hibernate/sql/results/spi/ListResultsConsumer.java index 1698411f91c7..a3e72c7b9028 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/spi/ListResultsConsumer.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/spi/ListResultsConsumer.java @@ -10,7 +10,6 @@ import java.util.Locale; import org.hibernate.HibernateException; -import org.hibernate.engine.spi.PersistenceContext; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.query.ResultListTransformer; import org.hibernate.sql.exec.spi.ExecutionContext; @@ -20,7 +19,6 @@ import org.hibernate.sql.results.jdbc.spi.JdbcValuesSourceProcessingState; import org.hibernate.type.descriptor.java.JavaType; import org.hibernate.type.descriptor.java.spi.EntityJavaType; -import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry; import org.hibernate.type.spi.TypeConfiguration; import org.checkerframework.checker.nullness.qual.Nullable; @@ -150,11 +148,11 @@ public List consume( rowReader.startLoading( rowProcessingState ); RuntimeException ex = null; - final PersistenceContext persistenceContext = session.getPersistenceContextInternal(); + final var persistenceContext = session.getPersistenceContextInternal(); persistenceContext.beforeLoad(); persistenceContext.getLoadContexts().register( jdbcValuesSourceProcessingState ); try { - final JavaType domainResultJavaType = resolveDomainResultJavaType( + final var domainResultJavaType = resolveDomainResultJavaType( rowReader.getDomainResultResultJavaType(), rowReader.getResultJavaTypes(), session.getTypeConfiguration() @@ -162,7 +160,7 @@ public List consume( final boolean isEntityResultType = domainResultJavaType instanceof EntityJavaType; final int initialCollectionSize = Math.min( jdbcValues.getResultCountEstimate(), INITIAL_COLLECTION_SIZE_LIMIT ); - final Results results = createResults( isEntityResultType, domainResultJavaType, initialCollectionSize ); + final var results = createResults( isEntityResultType, domainResultJavaType, initialCollectionSize ); final int readRows = readRows( rowProcessingState, rowReader, isEntityResultType, results ); rowReader.finishUp( rowProcessingState ); jdbcValuesSourceProcessingState.finishUp( readRows > 1 ); @@ -283,35 +281,32 @@ private static int readUnique( return readRows; } + @SuppressWarnings("unchecked") //TODO: fix the unchecked casts private JavaType resolveDomainResultJavaType( Class domainResultResultJavaType, List<@Nullable JavaType> resultJavaTypes, TypeConfiguration typeConfiguration) { - final JavaTypeRegistry javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); + final var javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); if ( domainResultResultJavaType != null ) { - final JavaType resultJavaType = javaTypeRegistry.resolveDescriptor( domainResultResultJavaType ); + final var resultJavaType = javaTypeRegistry.resolveDescriptor( domainResultResultJavaType ); // Could be that the user requested a more general type than the actual type, // so resolve the most concrete type since this type is used to determine equality of objects - if ( resultJavaTypes.size() == 1 && isMoreConcrete( resultJavaType, resultJavaTypes.get( 0 ) ) ) { - //noinspection unchecked + if ( resultJavaTypes.size() == 1 + && isMoreConcrete( resultJavaType, resultJavaTypes.get( 0 ) ) ) { return (JavaType) resultJavaTypes.get( 0 ); } return resultJavaType; } if ( resultJavaTypes.size() == 1 ) { - final JavaType firstJavaType = resultJavaTypes.get( 0 ); - if ( firstJavaType == null ) { - return javaTypeRegistry.getDescriptor( Object.class ); - } - else { - //noinspection unchecked - return (JavaType) firstJavaType; - } + final var firstJavaType = resultJavaTypes.get( 0 ); + return firstJavaType == null + ? (JavaType) javaTypeRegistry.resolveDescriptor( Object.class ) + : (JavaType) firstJavaType; } else { - return javaTypeRegistry.getDescriptor( Object[].class ); + return (JavaType) javaTypeRegistry.resolveDescriptor( Object[].class ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/AbstractStandardBasicType.java b/hibernate-core/src/main/java/org/hibernate/type/AbstractStandardBasicType.java index 62a4ceed34ee..5da4df670708 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/AbstractStandardBasicType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/AbstractStandardBasicType.java @@ -289,7 +289,7 @@ public final void beforeAssemble(Serializable cached, SharedSessionContractImple public final Object replace(Object original, Object target, SharedSessionContractImplementor session, Object owner, Map copyCache) { return original == null && target == null ? null - : javaType.getReplacement( javaType.cast( original ) , javaType.cast( target ) , session ); + : javaType.getReplacement( javaType.cast( original ), javaType.cast( target ), session ); } @@ -341,7 +341,7 @@ public void nullSafeSet(CallableStatement st, T value, String name, SharedSessio } protected final void nullSafeSet(CallableStatement st, Object value, String name, WrapperOptions options) throws SQLException { - getJdbcValueBinder().bind( st, javaType.cast( value ) , name, options ); + getJdbcValueBinder().bind( st, javaType.cast( value ), name, options ); } @Override @@ -363,8 +363,7 @@ public CastType getCastType() { // and the cast type determination here. Note that we interpret the converter in ConvertedBasicTypeImpl // to properly determine the correct cast type final var jdbcType = getJdbcType(); - final int jdbcTypeCode = jdbcType.getDdlTypeCode(); - switch ( jdbcTypeCode ) { + switch ( jdbcType.getDdlTypeCode() ) { case Types.BIT: case Types.SMALLINT: case Types.TINYINT: diff --git a/hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java b/hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java index b4603acc2217..4b437c0184f4 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java +++ b/hibernate-core/src/main/java/org/hibernate/type/BasicTypeRegistry.java @@ -137,8 +137,9 @@ public BasicType resolve(Class javaType, int sqlTypeCode) { return resolve( getJavaTypeRegistry().resolveDescriptor( javaType ), sqlTypeCode ); } + // no longer used public BasicType resolve(java.lang.reflect.Type javaType, int sqlTypeCode) { - return resolve( getJavaTypeRegistry().getDescriptor( javaType ), sqlTypeCode ); + return resolve( getJavaTypeRegistry().resolveDescriptor( javaType ), sqlTypeCode ); } public BasicType resolve(JavaType javaType, int sqlTypeCode) { @@ -406,7 +407,8 @@ private void applyRegistrationKeys(BasicType type, String[] keys) { // Incredibly verbose logging disabled // LOG.tracef( "Adding type registration %s -> %s", key, type ); - final Type old = typesByName.put( key, type ); +// final Type old = + typesByName.put( key, type ); // if ( old != null && old != type ) { // LOG.tracef( // "Type registration key [%s] overrode previous entry : `%s`", @@ -430,7 +432,8 @@ private void applyRegistrationKeys(BasicTypeReference type, String[] keys) { // Incredibly verbose logging disabled // LOG.tracef( "Adding type registration %s -> %s", key, type ); - final BasicTypeReference old = typeReferencesByName.put( key, type ); +// final BasicTypeReference old = + typeReferencesByName.put( key, type ); // if ( old != null && old != type ) { // LOG.tracef( // "Type registration key [%s] overrode previous entry : `%s`", diff --git a/hibernate-core/src/main/java/org/hibernate/type/CustomType.java b/hibernate-core/src/main/java/org/hibernate/type/CustomType.java index 446157f45f9a..c2b82fc313f9 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/CustomType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/CustomType.java @@ -93,7 +93,7 @@ public CustomType(UserType userType, String[] registrationKeys, TypeConfigura else { // create a JdbcType adapter that uses the UserType binder/extract handling jdbcType = new UserTypeJdbcTypeAdapter<>( userType, mappedJavaType ); - jdbcJavaType = jdbcType.getJdbcRecommendedJavaTypeMapping( null, null, typeConfiguration ); + jdbcJavaType = jdbcType.getRecommendedJavaType( null, null, typeConfiguration ); valueExtractor = jdbcType.getExtractor( mappedJavaType ); valueBinder = jdbcType.getBinder( mappedJavaType ); jdbcLiteralFormatter = diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/AttributeConverterBean.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/AttributeConverterBean.java index 51b9a3fb5909..0cdc917c1cda 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/AttributeConverterBean.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/AttributeConverterBean.java @@ -74,14 +74,16 @@ private JavaType getTypeDescriptor( private MutabilityPlan getMutabilityPlan( ManagedBean> attributeConverterBean, JpaAttributeConverterCreationContext context) { - final MutabilityPlan mutabilityPlan = + final var mutabilityPlan = RegistryHelper.INSTANCE.determineMutabilityPlan( - attributeConverterBean.getBeanClass(), + (java.lang.reflect.Type) + attributeConverterBean.getBeanClass(), context.getTypeConfiguration() ); + //noinspection unchecked return mutabilityPlan == null ? new AttributeConverterMutabilityPlan<>( this, true ) - : mutabilityPlan; + : (MutabilityPlan) mutabilityPlan; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/ConverterHelper.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/ConverterHelper.java index 5c2b3ca5d8b0..ae5117c1e6a0 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/ConverterHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/converter/internal/ConverterHelper.java @@ -21,28 +21,34 @@ public class ConverterHelper { public static BasicValueConverter createValueConverter( AttributeConverter converter, JavaTypeRegistry registry) { - final var converterType = extractParameterizedType( converter.getClass(), AttributeConverter.class ); - final var typeArguments = converterType.getActualTypeArguments(); - final var domainJavaClass = extractClass( typeArguments[0] ); - final var relationalJavaClass = extractClass( typeArguments[1] ); + final var typeArguments = + extractParameterizedType( converter.getClass(), AttributeConverter.class ) + .getActualTypeArguments(); + @SuppressWarnings("unchecked") // perfectly safe + final var domainJavaClass = (Class) extractClass( typeArguments[0] ); + @SuppressWarnings("unchecked") // perfectly safe + final var relationalJavaClass = (Class) extractClass( typeArguments[1] ); return new AttributeConverterInstance<>( converter, - registry.getDescriptor( domainJavaClass ), - registry.getDescriptor( relationalJavaClass ) + registry.resolveDescriptor( domainJavaClass ), + registry.resolveDescriptor( relationalJavaClass ) ); } public static JpaAttributeConverter createJpaAttributeConverter( ManagedBean> bean, JavaTypeRegistry registry) { - final var converterType = extractParameterizedType( bean.getBeanClass(), AttributeConverter.class ); - final var typeArguments = converterType.getActualTypeArguments(); - final var domainJavaClass = extractClass( typeArguments[0] ); - final var relationalJavaClass = extractClass( typeArguments[1] ); + final var typeArguments = + extractParameterizedType( bean.getBeanClass(), AttributeConverter.class ) + .getActualTypeArguments(); + @SuppressWarnings("unchecked") // perfectly safe + final var domainJavaClass = (Class) extractClass( typeArguments[0] ); + @SuppressWarnings("unchecked") // perfectly safe + final var relationalJavaClass = (Class) extractClass( typeArguments[1] ); return new AttributeConverterBean<>( bean, registry.resolveDescriptor( bean.getBeanClass() ), - registry.getDescriptor( domainJavaClass ), - registry.getDescriptor( relationalJavaClass ) + registry.resolveDescriptor( domainJavaClass ), + registry.resolveDescriptor( relationalJavaClass ) ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JavaType.java index 93950012891a..c248d76982de 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/JavaType.java @@ -100,11 +100,27 @@ default String getTypeName() { * but some descriptors need specialized semantics, for example, the descriptors for * {@link JdbcDateJavaType java.sql.Date}, {@link JdbcTimeJavaType java.sql.Time}, and * {@link JdbcTimestampJavaType java.sql.Timestamp}. + *

+ * For {@link org.hibernate.type.descriptor.java.spi.EntityJavaType}, this method + * handles proxies in a semantically correct way, by checking the entity instance + * underlying the proxy object. */ default boolean isInstance(Object value) { return getJavaTypeClass().isInstance( value ); } + /** + * Apply a simple type cast to the given value, without attempting any sort of + * {@linkplain #coerce(Object) coercion} or {@linkplain #wrap wrapping}. This + * method is provided as a convenient way to avoid an unchecked cast to a type + * variable. Use {@code javaType.cast(value)} instead of {@code (T) value} + * wherever possible. + *

+ * Usually just {@link #getJavaTypeClass() getJavaTypeClass().}{@link Class#cast cast(value)}, + * but overridden in some cases as an "optimization". This optimization is + * almost certainly unnecessary, and might even indeed be harmful, since + * {@code Class.cast()} is an intrinsic. + */ default T cast(Object value) { return getJavaTypeClass().cast( value ); } @@ -134,7 +150,7 @@ default T getDefaultValue() { } /** - * Obtain the "recommended" {@link JdbcType SQL type descriptor} + * Obtain the "recommended" {@linkplain JdbcType SQL type descriptor} * for this Java type. Often, but not always, the source of this * recommendation is the JDBC specification. * @@ -322,10 +338,28 @@ interface CoercionContext { /** * Coerce the given value to this type, if possible. + *

+ * This method differs from {@link #wrap wrap()} in that it allows + * simple, basic, implicit type conversions, and does not require + * {@link WrapperOptions}. The {@code wrap()} method may be thought + * of as offering explicitly requested type conversions driven by a + * choice of {@link JdbcType}. + *

+ * An implementation of this method reports failure in one of two + * ways, by: + *

    + *
  • throwing {@link CoercionException}, or + *
  • simply returning the given uncoerced value. + *
+ *

+ * Therefore, this method is declared to return {@link Object}. + * In case immediate coercion is required, the following idiom + * may be used: + *

javaType.cast(javaType.coerce(value))
* * @param value The value to coerce - * @return The coerced value, or the given value - * if no coercion was possible + * @return The coerced value, or the given value if no coercion was + * possible * @throws CoercionException if coercion fails */ @Incubating diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/MutableMutabilityPlan.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/MutableMutabilityPlan.java index ff826c2595ef..1d129e72daf1 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/MutableMutabilityPlan.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/MutableMutabilityPlan.java @@ -15,7 +15,12 @@ */ public abstract class MutableMutabilityPlan implements MutabilityPlan { - public static final MutableMutabilityPlan INSTANCE = new MutableMutabilityPlan<>() { + public static MutableMutabilityPlan instance() { + //noinspection unchecked + return INSTANCE; + } + + public static final MutableMutabilityPlan INSTANCE = new MutableMutabilityPlan<>() { @Override protected Object deepCopyNotNull(Object value) { return value; diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/SerializableJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/SerializableJavaType.java index 39544887a8ec..8d8ee131d79c 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/SerializableJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/SerializableJavaType.java @@ -58,11 +58,6 @@ private static MutabilityPlan createMutabilityPlan(Class type) { : (MutabilityPlan) SerializableMutabilityPlan.INSTANCE; } - @Override - public boolean isInstance(Object value) { - return value instanceof Serializable; - } - @Override public JdbcType getRecommendedJdbcType(JdbcTypeIndicators indicators) { final int typeCode = indicators.isLob() ? Types.BLOB : Types.VARBINARY; @@ -137,7 +132,7 @@ else if (value instanceof Blob blob) { throw new HibernateException( e ); } } - else if ( getJavaTypeClass().isInstance( value ) ) { + else if ( isInstance( value ) ) { return cast( value ); } throw unknownWrap( value.getClass() ); diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/CollectionJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/CollectionJavaType.java index 06ae24e597ba..417f4f051977 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/CollectionJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/CollectionJavaType.java @@ -65,7 +65,7 @@ public JavaType createJavaType( case BAG, ID_BAG, LIST, SET, SORTED_SET, ORDERED_SET -> new BasicCollectionJavaType( parameterizedType, - registry.getDescriptor( typeArguments[typeArguments.length-1] ), + registry.resolveDescriptor( typeArguments[typeArguments.length-1] ), semantics ); case MAP, ORDERED_MAP, SORTED_MAP -> @@ -74,8 +74,8 @@ public JavaType createJavaType( parameterizedType, new MapMutabilityPlan( (MapSemantics) semantics, - registry.getDescriptor( typeArguments[0] ), - registry.getDescriptor( typeArguments[typeArguments.length-1] ) + registry.resolveDescriptor( typeArguments[0] ), + registry.resolveDescriptor( typeArguments[typeArguments.length-1] ) ) ); }; diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/JavaTypeRegistry.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/JavaTypeRegistry.java index d4f9a95dcc22..cfaad573f0d2 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/JavaTypeRegistry.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/JavaTypeRegistry.java @@ -4,6 +4,15 @@ */ package org.hibernate.type.descriptor.java.spi; +import org.hibernate.Internal; +import org.hibernate.type.descriptor.java.ArrayJavaType; +import org.hibernate.type.descriptor.java.JavaType; +import org.hibernate.type.descriptor.java.MutabilityPlan; +import org.hibernate.type.descriptor.java.MutableMutabilityPlan; +import org.hibernate.type.spi.TypeConfiguration; +import org.hibernate.type.spi.TypeConfigurationAware; +import org.jboss.logging.Logger; + import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -12,14 +21,8 @@ import java.util.function.Consumer; import java.util.function.Supplier; -import org.hibernate.type.descriptor.java.ArrayJavaType; -import org.hibernate.type.descriptor.java.JavaType; -import org.hibernate.type.descriptor.java.MutabilityPlan; -import org.hibernate.type.descriptor.java.MutableMutabilityPlan; -import org.hibernate.type.spi.TypeConfiguration; -import org.hibernate.type.spi.TypeConfigurationAware; +import static org.hibernate.internal.util.type.PrimitiveWrappers.canonicalize; -import org.jboss.logging.Logger; /** * A registry mapping {@link Class Java classes} to implementations @@ -75,7 +78,7 @@ public void forEachDescriptor(Consumer> consumer) { } public void addDescriptor(JavaType descriptor) { - final JavaType old = descriptorsByTypeName.put( descriptor.getJavaType().getTypeName(), descriptor ); + final var old = descriptorsByTypeName.put( descriptor.getJavaType().getTypeName(), descriptor ); if ( old != null ) { LOG.debugf( "JavaTypeRegistry entry replaced : %s -> %s (was %s)", @@ -87,7 +90,10 @@ public void addDescriptor(JavaType descriptor) { performInjections( descriptor ); } - @Deprecated(since = "7.2") // Due to unbound type parameter + // This method is terribly lacking in type safety but + // has wormed itself into so many clients that I can't + // easily do away with it right now + @Deprecated(since = "7.2") // Due to unbound type parameter and unchecked cast public JavaType getDescriptor(Type javaType) { //noinspection unchecked return (JavaType) resolveDescriptor( javaType ); @@ -97,14 +103,36 @@ public JavaType findDescriptor(Type javaType) { return descriptorsByTypeName.get( javaType.getTypeName() ); } - public JavaType findDescriptor(Class javaType) { - //noinspection unchecked - return (JavaType) findDescriptor( (Type) javaType ); + public JavaType findDescriptor(Class javaClass) { + final var cached = descriptorsByTypeName.get( javaClass.getTypeName() ); + return cached == null ? null : checkCached( javaClass, cached ); } public JavaType resolveDescriptor(Class javaType, Supplier> creator) { - //noinspection unchecked - return (JavaType) resolveDescriptor( javaType.getTypeName(), creator ); + final String javaTypeName = javaType.getTypeName(); + final var cached = descriptorsByTypeName.get( javaTypeName ); + if ( cached != null ) { + return checkCached( javaType, cached ); + } + else { + final var created = creator.get(); + descriptorsByTypeName.put( javaTypeName, created ); + return created; + } + } + + private static JavaType checkCached(Class javaClass, JavaType cached) { + final var cachedClass = cached.getJavaTypeClass(); + if ( !isCompatible( javaClass, cachedClass ) ) { + throw new IllegalStateException( "Type registration was corrupted for: " + javaClass.getName() ); + } + @SuppressWarnings("unchecked") // safe, we just checked + final var resolvedType = (JavaType) cached; + return resolvedType; + } + + private static boolean isCompatible(Class givenClass, Class cachedClass) { + return cachedClass == canonicalize( givenClass ); } @Deprecated(since = "7.2", forRemoval = true) // Can be private @@ -125,25 +153,18 @@ public JavaType resolveDescriptor(Type javaType) { } public JavaType resolveDescriptor(Class javaType) { - //noinspection unchecked - return (JavaType) resolveDescriptor( javaType, JavaTypeRegistry::createMutabilityPlan ); + return resolveDescriptor( javaType, JavaTypeRegistry::createMutabilityPlan ); } public JavaType resolveDescriptor(JavaType javaType) { - //noinspection unchecked - return (JavaType) resolveDescriptor( javaType.getJavaTypeClass().getTypeName(), () -> javaType ); + return resolveDescriptor( javaType.getJavaTypeClass(), () -> javaType ); } private static MutabilityPlan createMutabilityPlan(Type elementJavaType, TypeConfiguration typeConfiguration) { - final MutabilityPlan determinedPlan = RegistryHelper.INSTANCE.determineMutabilityPlan( - elementJavaType, - typeConfiguration - ); - if ( determinedPlan != null ) { - return determinedPlan; - } + final var determinedPlan = + RegistryHelper.INSTANCE.determineMutabilityPlan( elementJavaType, typeConfiguration ); + return determinedPlan != null ? determinedPlan : MutableMutabilityPlan.instance(); - return MutableMutabilityPlan.INSTANCE; } public JavaType resolveArrayDescriptor(Class elementJavaType) { @@ -153,7 +174,26 @@ public JavaType resolveArrayDescriptor(Class elementJavaType) { () -> createArrayTypeDescriptor( elementJavaType, JavaTypeRegistry::createMutabilityPlan) ); } - @Deprecated(since = "7.2", forRemoval = true) // Can be private + // WAS: +// public JavaType resolveArrayDescriptor(Class elementJavaType) { +// return resolveDescriptor( arrayClass( elementJavaType ), +// () -> createArrayTypeDescriptor( elementJavaType, JavaTypeRegistry::createMutabilityPlan) ); +// } + + @Internal // Can be demoted to private + public JavaType resolveDescriptor( + Class javaType, + BiFunction> mutabilityPlanCreator) { + //noinspection unchecked + return resolveDescriptor( + javaType, + () -> javaType.isArray() + ? (JavaType) createArrayTypeDescriptor( javaType.getComponentType(), mutabilityPlanCreator ) + : createTypeDescriptor( javaType, mutabilityPlanCreator ) + ); + } + + @Internal // Can be demoted to private public JavaType resolveDescriptor( Type javaType, BiFunction> mutabilityPlanCreator) { @@ -175,7 +215,7 @@ else if ( javaType instanceof Class javaClass && javaClass.isArray() ) { } private JavaType createArrayTypeDescriptor(Class elementJavaType, BiFunction> mutabilityPlanCreator) { - JavaType elementTypeDescriptor = findDescriptor( elementJavaType ); + var elementTypeDescriptor = findDescriptor( elementJavaType ); if ( elementTypeDescriptor == null ) { elementTypeDescriptor = createTypeDescriptor( elementJavaType, mutabilityPlanCreator ); } @@ -186,30 +226,55 @@ private JavaType createTypeDescriptor(Type javaType, BiFunction (MutabilityPlan) mutabilityPlanCreator.apply( javaType, typeConfiguration ), + () -> (MutabilityPlan) + mutabilityPlanCreator.apply( javaType, typeConfiguration ), typeConfiguration ); } - public JavaType resolveManagedTypeDescriptor(Type javaType) { - return resolveManagedTypeDescriptor( javaType, false ); + public JavaType resolveManagedTypeDescriptor(Class javaType) { + return resolveManagedTypeDescriptor( javaType, JavaTypeBasicAdaptor::new ); } - public JavaType resolveManagedTypeDescriptor(Class javaType) { - //noinspection unchecked - return (JavaType) resolveManagedTypeDescriptor( javaType, false ); + public JavaType resolveEntityTypeDescriptor(Class javaType) { + return resolveManagedTypeDescriptor( javaType, EntityJavaType::new ); } - public JavaType resolveEntityTypeDescriptor(Type javaType) { - return resolveManagedTypeDescriptor( javaType, true ); + private JavaType resolveManagedTypeDescriptor( + Class javaType, + BiFunction, MutabilityPlan, JavaType> instantiate) { + return resolveDescriptor( + javaType, + () -> { + final var determinedPlan = + RegistryHelper.INSTANCE.determineMutabilityPlan( javaType, typeConfiguration ); + return instantiate.apply( + javaType, + determinedPlan != null + ? determinedPlan + : MutableMutabilityPlan.instance() + ); + } + ); } - public JavaType resolveEntityTypeDescriptor(Class javaType) { - //noinspection unchecked - return (JavaType) resolveManagedTypeDescriptor( javaType, true ); + // CAN BE REMOVED: + + @Deprecated(since = "7.2", forRemoval = true) // no longer used + public JavaType resolveManagedTypeDescriptor(Type javaType) { + return resolveManagedTypeDescriptor( javaType, JavaTypeBasicAdaptor::new ); + } + + @Deprecated(since = "7.2", forRemoval = true) // no longer used + public JavaType resolveEntityTypeDescriptor(Type javaType) { + return resolveManagedTypeDescriptor( javaType, EntityJavaType::new ); } - private JavaType resolveManagedTypeDescriptor(Type javaType, boolean entity) { + @Deprecated(since = "7.2", forRemoval = true) // no longer used + @SuppressWarnings("unchecked") + private JavaType resolveManagedTypeDescriptor( + Type javaType, + BiFunction, MutabilityPlan, JavaType> instantiate) { return resolveDescriptor( javaType.getTypeName(), () -> { @@ -222,18 +287,13 @@ private JavaType resolveManagedTypeDescriptor(Type javaType, boolean enti javaTypeClass = (Class) parameterizedType.getRawType(); } - final MutabilityPlan determinedPlan = RegistryHelper.INSTANCE.determineMutabilityPlan( - javaType, - typeConfiguration - ); + final var determinedPlan = + RegistryHelper.INSTANCE.determineMutabilityPlan( javaTypeClass, typeConfiguration ); final MutabilityPlan mutabilityPlan = determinedPlan != null ? determinedPlan - : (MutabilityPlan) MutableMutabilityPlan.INSTANCE; - - return entity - ? new EntityJavaType<>( javaTypeClass, mutabilityPlan ) - : new JavaTypeBasicAdaptor<>( javaTypeClass, mutabilityPlan ); + : MutableMutabilityPlan.instance(); + return instantiate.apply( javaTypeClass, mutabilityPlan ); } ); } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/RegistryHelper.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/RegistryHelper.java index 37f18bfd1473..1eda91306014 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/RegistryHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/RegistryHelper.java @@ -12,6 +12,7 @@ import org.hibernate.annotations.Immutable; import org.hibernate.annotations.Mutability; import org.hibernate.internal.util.ReflectHelper; +import org.hibernate.type.descriptor.java.BasicJavaType; import org.hibernate.type.descriptor.java.EnumJavaType; import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan; import org.hibernate.type.descriptor.java.JavaType; @@ -36,27 +37,37 @@ public JavaType createTypeDescriptor( Type javaType, Supplier> fallbackMutabilityPlanResolver, TypeConfiguration typeConfiguration) { - return createTypeDescriptor( - javaType, - (javaTypeClass) -> { - MutabilityPlan mutabilityPlan = determineMutabilityPlan( javaType, typeConfiguration ); - if ( mutabilityPlan == null ) { - mutabilityPlan = fallbackMutabilityPlanResolver.get(); - } - return mutabilityPlan; - } - ); + return createTypeDescriptor( determineJavaTypeClass( javaType ), + javaTypeClass -> mutabilityPlan( javaTypeClass, fallbackMutabilityPlanResolver, typeConfiguration ) ); } - public MutabilityPlan determineMutabilityPlan(Type javaType, TypeConfiguration typeConfiguration) { - final Class javaTypeClass = determineJavaTypeClass( javaType ); + public JavaType createTypeDescriptor( + Class javaType, + Supplier> fallbackMutabilityPlanResolver, + TypeConfiguration typeConfiguration) { + return createTypeDescriptor( javaType, + javaTypeClass -> mutabilityPlan( javaTypeClass, fallbackMutabilityPlanResolver, typeConfiguration ) ); + } + private MutabilityPlan mutabilityPlan( + Class javaTypeClass, + Supplier> fallbackMutabilityPlanResolver, + TypeConfiguration typeConfiguration) { + var mutabilityPlan = determineMutabilityPlan( javaTypeClass, typeConfiguration ); + return mutabilityPlan == null ? fallbackMutabilityPlanResolver.get() : mutabilityPlan; + } + + public MutabilityPlan determineMutabilityPlan(Type javaType, TypeConfiguration typeConfiguration) { + return determineMutabilityPlan( determineJavaTypeClass( javaType ), typeConfiguration ); + } + + public MutabilityPlan determineMutabilityPlan(Class javaTypeClass, TypeConfiguration typeConfiguration) { if ( javaTypeClass.isAnnotationPresent( Immutable.class ) ) { return ImmutableMutabilityPlan.instance(); } if ( javaTypeClass.isAnnotationPresent( Mutability.class ) ) { - final Mutability annotation = javaTypeClass.getAnnotation( Mutability.class ); + final var annotation = javaTypeClass.getAnnotation( Mutability.class ); return typeConfiguration.createMutabilityPlan( annotation.value() ); } @@ -67,29 +78,26 @@ public MutabilityPlan determineMutabilityPlan(Type javaType, TypeConfigur if ( Serializable.class.isAssignableFrom( javaTypeClass ) ) { return (MutabilityPlan) SerializableJavaType.SerializableMutabilityPlan.INSTANCE; } - return null; } - private JavaType createTypeDescriptor( - Type javaType, - Function,MutabilityPlan> mutabilityPlanResolver) { - final Class javaTypeClass = determineJavaTypeClass( javaType ); - + private BasicJavaType createTypeDescriptor( + Class javaTypeClass, + Function, MutabilityPlan> mutabilityPlanResolver) { if ( javaTypeClass.isEnum() ) { // enums are unequivocally immutable //noinspection rawtypes, unchecked return new EnumJavaType( javaTypeClass ); } - final MutabilityPlan plan = mutabilityPlanResolver.apply( javaTypeClass ); + final var plan = mutabilityPlanResolver.apply( javaTypeClass ); if ( Serializable.class.isAssignableFrom( javaTypeClass ) ) { //noinspection rawtypes, unchecked return new SerializableJavaType( javaTypeClass, plan ); } - return new UnknownBasicJavaType<>( javaType, plan ); + return new UnknownBasicJavaType<>( javaTypeClass, plan ); } private Class determineJavaTypeClass(Type javaType) { diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/ArrayJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/ArrayJdbcType.java index 2c1e3f9b7b32..4db0436629d3 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/ArrayJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/ArrayJdbcType.java @@ -60,22 +60,20 @@ public JdbcType getElementJdbcType() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - final JavaType elementJavaType = - elementJdbcType.getJdbcRecommendedJavaTypeMapping( precision, scale, typeConfiguration ); + final var elementJavaType = + elementJdbcType.getRecommendedJavaType( precision, scale, typeConfiguration ); final var javaType = typeConfiguration.getJavaTypeRegistry() .resolveDescriptor( newInstance( elementJavaType.getJavaTypeClass(), 0 ).getClass() ); if ( javaType instanceof BasicPluralType ) { - //noinspection unchecked - return (JavaType) javaType; + return javaType; } else { - //noinspection unchecked - return (JavaType) javaType.createJavaType( + return javaType.createJavaType( new ParameterizedTypeImpl( javaType.getJavaTypeClass(), new Type[0], null ), typeConfiguration ); @@ -155,10 +153,10 @@ protected Object[] getArray(BasicBinder binder, ValueBinder elementBin final var underlyingJdbcType = typeConfiguration.getJdbcTypeRegistry() .getDescriptor( elementJdbcType.getDefaultSqlTypeCode() ); - final Class preferredJavaTypeClass = elementJdbcType.getPreferredJavaTypeClass( options ); - final Class elementJdbcJavaTypeClass = + final var preferredJavaTypeClass = elementJdbcType.getPreferredJavaTypeClass( options ); + final var elementJdbcJavaTypeClass = preferredJavaTypeClass == null - ? underlyingJdbcType.getJdbcRecommendedJavaTypeMapping(null, null, typeConfiguration ) + ? underlyingJdbcType.getRecommendedJavaType(null, null, typeConfiguration ) .getJavaTypeClass() : preferredJavaTypeClass; final var arrayClass = (Class) diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BigIntJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BigIntJdbcType.java index ad6d87804f06..272f3ae185e2 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BigIntJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BigIntJdbcType.java @@ -34,11 +34,11 @@ public int getJdbcTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Long.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Long.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BlobJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BlobJdbcType.java index 2f04ef74e8e5..fcd47f4c1e9b 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BlobJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BlobJdbcType.java @@ -45,11 +45,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Blob.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Blob.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BooleanJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BooleanJdbcType.java index 675e7db3509f..db66220c9361 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BooleanJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/BooleanJdbcType.java @@ -43,11 +43,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Boolean.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Boolean.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DateJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DateJdbcType.java index 55afae6cfca6..e08204bc420a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DateJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DateJdbcType.java @@ -49,14 +49,14 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { final var javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); return typeConfiguration.getCurrentBaseSqlTypeIndicators().preferJdbcDatetimeTypes() - ? javaTypeRegistry.getDescriptor( Date.class ) - : javaTypeRegistry.getDescriptor( LocalDate.class ); + ? javaTypeRegistry.resolveDescriptor( Date.class ) + : javaTypeRegistry.resolveDescriptor( LocalDate.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DecimalJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DecimalJdbcType.java index 6a44c758a799..b2d3966f3cb0 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DecimalJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DecimalJdbcType.java @@ -45,11 +45,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( BigDecimal.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( BigDecimal.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DoubleJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DoubleJdbcType.java index 9836964ca3c2..a6c6a94fc4af 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DoubleJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/DoubleJdbcType.java @@ -61,11 +61,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Double.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Double.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/FloatJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/FloatJdbcType.java index b07f6cf7c43d..1e714b55c5a7 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/FloatJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/FloatJdbcType.java @@ -44,17 +44,17 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { if ( length != null ) { int floatPrecision = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect().getFloatPrecision(); if ( length <= floatPrecision ) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Float.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Float.class ); } } - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Double.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Double.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/IntegerJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/IntegerJdbcType.java index 7f18e71c1217..82e877604b0f 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/IntegerJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/IntegerJdbcType.java @@ -44,11 +44,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Integer.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Integer.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcType.java index cadfedf8a669..b577d967964e 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcType.java @@ -90,8 +90,8 @@ default int getDefaultSqlTypeCode() { } /** - * A {@linkplain SqlTypes JDBC type code} that identifies the SQL column type to - * be used for schema generation. + * A {@linkplain SqlTypes JDBC type code} that identifies the SQL column type + * used for schema generation. *

* This value is passed to {@link DdlTypeRegistry#getTypeName(int, Size, Type)} * to obtain the SQL column type. @@ -103,21 +103,40 @@ default int getDdlTypeCode() { return getDefaultSqlTypeCode(); } - default JavaType getJdbcRecommendedJavaTypeMapping( - Integer precision, - Integer scale, + /** + * The {@linkplain JavaType Java type} usually is used to represent values of + * this JDBC type in the entity model of the data. Often, but not always, the + * source of this recommendation is the JDBC specification. + * + * @since 7.2 + */ + default JavaType getRecommendedJavaType( + Integer precision, Integer scale, TypeConfiguration typeConfiguration) { // match legacy behavior - return typeConfiguration.getJavaTypeRegistry().getDescriptor( + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( JdbcTypeJavaClassMappings.INSTANCE.determineJavaClassForJdbcTypeCode( getDefaultSqlTypeCode() ) ); } /** - * Obtain a {@linkplain JdbcLiteralFormatter formatter} object capable of rendering - * values of the given {@linkplain JavaType Java type} as SQL literals of the type - * represented by this object. + * @deprecated Due to the unchecked cast to a generic type. + * Use {@link #getRecommendedJavaType}. */ + @Deprecated(forRemoval = true, since = "7.2") + @SuppressWarnings("unchecked") + default JavaType getJdbcRecommendedJavaTypeMapping( + Integer precision, + Integer scale, + TypeConfiguration typeConfiguration) { + return (JavaType) getRecommendedJavaType( precision, scale, typeConfiguration ); + } + + /** + * Obtain a {@linkplain JdbcLiteralFormatter formatter} object capable of rendering + * values of the given {@linkplain JavaType Java type} as SQL literals of the type + * represented by this object. + */ // todo (6.0) : move to {@link org.hibernate.metamodel.mapping.JdbcMapping}? default JdbcLiteralFormatter getJdbcLiteralFormatter(JavaType javaType) { return (appender, value, dialect, wrapperOptions) -> diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/NVarcharJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/NVarcharJdbcType.java index 0ad1134cb674..34b9fef75f1a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/NVarcharJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/NVarcharJdbcType.java @@ -47,14 +47,14 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { if ( length != null && length == 1 ) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Character.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Character.class ); } - return typeConfiguration.getJavaTypeRegistry().getDescriptor( String.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( String.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/RealJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/RealJdbcType.java index 81f017dbee67..dd143137c8f7 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/RealJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/RealJdbcType.java @@ -40,11 +40,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Float.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Float.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/SmallIntJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/SmallIntJdbcType.java index 34c424082b46..8739c5560952 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/SmallIntJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/SmallIntJdbcType.java @@ -44,11 +44,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Short.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Short.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/StructJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/StructJdbcType.java index 59cfcee684f6..43a643896f26 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/StructJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/StructJdbcType.java @@ -104,17 +104,13 @@ public EmbeddableMappingType getEmbeddableMappingType() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - if ( embeddableMappingType == null ) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Object[].class ); - } - else { - //noinspection unchecked - return (JavaType) embeddableMappingType.getMappedJavaType(); - } + return embeddableMappingType == null + ? typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Object[].class ) + : embeddableMappingType.getMappedJavaType(); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeAsTimestampWithTimeZoneJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeAsTimestampWithTimeZoneJdbcType.java index 0a0ab2e08eba..a8da092f901d 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeAsTimestampWithTimeZoneJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeAsTimestampWithTimeZoneJdbcType.java @@ -43,11 +43,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( OffsetTime.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( OffsetTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeJdbcType.java index a31f17144629..cc3dba3719a3 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeJdbcType.java @@ -49,14 +49,14 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { final var javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); return typeConfiguration.getCurrentBaseSqlTypeIndicators().preferJdbcDatetimeTypes() - ? javaTypeRegistry.getDescriptor( Time.class ) - : javaTypeRegistry.getDescriptor( LocalTime.class ); + ? javaTypeRegistry.resolveDescriptor( Time.class ) + : javaTypeRegistry.resolveDescriptor( LocalTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsJdbcTimeJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsJdbcTimeJdbcType.java index 1dcd84870e45..ead44b9f8d3d 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsJdbcTimeJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsJdbcTimeJdbcType.java @@ -59,11 +59,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( OffsetTime.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( OffsetTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsOffsetTimeJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsOffsetTimeJdbcType.java index 7f017d80b706..80871334f67a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsOffsetTimeJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeUtcAsOffsetTimeJdbcType.java @@ -55,11 +55,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( OffsetTime.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( OffsetTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeWithTimeZoneJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeWithTimeZoneJdbcType.java index e4a286bb9531..301439227a94 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeWithTimeZoneJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimeWithTimeZoneJdbcType.java @@ -49,11 +49,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( OffsetTime.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( OffsetTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampJdbcType.java index 43f1922633c6..636d6e0eebe5 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampJdbcType.java @@ -49,14 +49,14 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { final var javaTypeRegistry = typeConfiguration.getJavaTypeRegistry(); return typeConfiguration.getCurrentBaseSqlTypeIndicators().preferJdbcDatetimeTypes() - ? javaTypeRegistry.getDescriptor( Timestamp.class ) - : javaTypeRegistry.getDescriptor( LocalDateTime.class ); + ? javaTypeRegistry.resolveDescriptor( Timestamp.class ) + : javaTypeRegistry.resolveDescriptor( LocalDateTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsInstantJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsInstantJdbcType.java index 96008c8246d6..a11557091a4f 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsInstantJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsInstantJdbcType.java @@ -57,11 +57,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Instant.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Instant.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsJdbcTimestampJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsJdbcTimestampJdbcType.java index d0871a121e94..49d220330637 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsJdbcTimestampJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsJdbcTimestampJdbcType.java @@ -58,11 +58,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Instant.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Instant.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsOffsetDateTimeJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsOffsetDateTimeJdbcType.java index 134fecc5d551..e5b41070e60a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsOffsetDateTimeJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampUtcAsOffsetDateTimeJdbcType.java @@ -56,11 +56,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Instant.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Instant.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampWithTimeZoneJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampWithTimeZoneJdbcType.java index 4a1604c4d427..a4119ba45057 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampWithTimeZoneJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TimestampWithTimeZoneJdbcType.java @@ -48,11 +48,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( OffsetDateTime.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( OffsetDateTime.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TinyIntJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TinyIntJdbcType.java index e340be866863..63dc65e8bf4d 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TinyIntJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/TinyIntJdbcType.java @@ -47,11 +47,11 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Byte.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Byte.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarbinaryJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarbinaryJdbcType.java index b8f588aa8908..e7bd6d448b40 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarbinaryJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarbinaryJdbcType.java @@ -53,11 +53,11 @@ public int getJdbcTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( byte[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( byte[].class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarcharJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarcharJdbcType.java index 7015b5a2c442..b9db43dafa89 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarcharJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/VarcharJdbcType.java @@ -46,12 +46,12 @@ public String toString() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { return typeConfiguration.getJavaTypeRegistry() - .getDescriptor( length != null && length == 1 ? Character.class : String.class ); + .resolveDescriptor( length != null && length == 1 ? Character.class : String.class ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/AbstractJavaTimeJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/AbstractJavaTimeJdbcType.java index 6664fffa80da..2b859a4a1b19 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/AbstractJavaTimeJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/AbstractJavaTimeJdbcType.java @@ -29,11 +29,11 @@ public Class getPreferredJavaTypeClass(WrapperOptions options) { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( javaTimeType ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( javaTimeType ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/DelayedStructJdbcType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/DelayedStructJdbcType.java index 8cba3c394859..730082cef19a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/DelayedStructJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/internal/DelayedStructJdbcType.java @@ -51,12 +51,11 @@ public String getStructTypeName() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - //noinspection unchecked - return (JavaType) embeddableAggregateJavaType; + return embeddableAggregateJavaType; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/internal/ParameterizedTypeImpl.java b/hibernate-core/src/main/java/org/hibernate/type/internal/ParameterizedTypeImpl.java index b72de29aebcc..5d563f87aab2 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/internal/ParameterizedTypeImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/type/internal/ParameterizedTypeImpl.java @@ -7,13 +7,12 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Arrays; -import java.util.List; import java.util.Objects; import java.util.StringJoiner; import org.hibernate.models.spi.ParameterizedTypeDetails; -import org.hibernate.models.spi.TypeDetails; -import org.hibernate.models.spi.TypeVariableScope; + +import static org.hibernate.models.spi.TypeDetails.Kind.PARAMETERIZED_TYPE; public class ParameterizedTypeImpl implements ParameterizedType { @@ -28,39 +27,33 @@ public ParameterizedTypeImpl(Type rawType, Type[] substTypeArgs, Type ownerType) } public static ParameterizedTypeImpl from(ParameterizedTypeDetails typeDetails) { - final java.lang.reflect.Type attributeType = typeDetails.determineRawClass().toJavaClass(); - - final List arguments = typeDetails.asParameterizedType().getArguments(); + final var attributeType = typeDetails.determineRawClass().toJavaClass(); + final var arguments = typeDetails.asParameterizedType().getArguments(); final int argumentsSize = arguments.size(); - final java.lang.reflect.Type[] argumentTypes = new java.lang.reflect.Type[argumentsSize]; + final var argumentTypes = new Type[argumentsSize]; for ( int i = 0; i < argumentsSize; i++ ) { - TypeDetails argument = arguments.get( i ); - if ( argument.getTypeKind() == TypeDetails.Kind.PARAMETERIZED_TYPE ) { - argumentTypes[i] = from( argument.asParameterizedType() ); - } - else { - argumentTypes[i] = argument.determineRawClass().toJavaClass(); - } - } - final TypeVariableScope owner = typeDetails.asParameterizedType().getOwner(); - final java.lang.reflect.Type ownerType; - if ( owner != null ) { - ownerType = owner.determineRawClass().toJavaClass(); - } - else { - ownerType = null; + final var argument = arguments.get( i ); + argumentTypes[i] = + argument.getTypeKind() == PARAMETERIZED_TYPE + ? from( argument.asParameterizedType() ) + : argument.determineRawClass().toJavaClass(); } + final var owner = typeDetails.asParameterizedType().getOwner(); + final var ownerType = owner == null ? null : owner.determineRawClass().toJavaClass(); return new ParameterizedTypeImpl( attributeType, argumentTypes, ownerType ); } + @Override public Type[] getActualTypeArguments() { return substTypeArgs; } + @Override public Type getRawType() { return rawType; } + @Override public Type getOwnerType() { return ownerType; } @@ -84,42 +77,37 @@ public int hashCode() { @Override public String toString() { - final StringBuilder sb = new StringBuilder(); + final var typeExpression = new StringBuilder(); if ( ownerType != null ) { - sb.append( ownerType.getTypeName() ); - - sb.append( "$" ); - + typeExpression.append( ownerType.getTypeName() ).append( "$" ); if ( ownerType instanceof ParameterizedType parameterizedType ) { - // Find simple name of nested type by removing the - // shared prefix with owner. - sb.append( - rawType.getTypeName().replace( - parameterizedType.getRawType().getTypeName() + "$", - "" - ) - ); + // Find the simple name of the nested type by + // removing the shared prefix with the outer type. + final int prefixLength = + parameterizedType.getRawType().getTypeName().length() + + 1; // account for the '$' separator + typeExpression.append( rawType.getTypeName().substring( prefixLength ) ); } else if ( rawType instanceof Class clazz ) { - sb.append( clazz.getSimpleName() ); + typeExpression.append( clazz.getSimpleName() ); } else { - sb.append( rawType.getTypeName() ); + typeExpression.append( rawType.getTypeName() ); } } else { - sb.append( rawType.getTypeName() ); + typeExpression.append( rawType.getTypeName() ); } if ( substTypeArgs != null ) { - final StringJoiner sj = new StringJoiner( ", ", "<", ">" ); - sj.setEmptyValue( "" ); - for ( Type t : substTypeArgs ) { - sj.add( t.getTypeName() ); + final var argList = new StringJoiner( ", ", "<", ">" ); + argList.setEmptyValue( "" ); + for ( var type : substTypeArgs ) { + argList.add( type.getTypeName() ); } - sb.append( sj ); + typeExpression.append( argList ); } - return sb.toString(); + return typeExpression.toString(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/internal/UserTypeJdbcTypeAdapter.java b/hibernate-core/src/main/java/org/hibernate/type/internal/UserTypeJdbcTypeAdapter.java index 4b46f66b3e7f..70660b1bc5ef 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/internal/UserTypeJdbcTypeAdapter.java +++ b/hibernate-core/src/main/java/org/hibernate/type/internal/UserTypeJdbcTypeAdapter.java @@ -76,12 +76,11 @@ public ValueExtractor getExtractor(JavaType javaType) { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - //noinspection unchecked - return (JavaType) javaType; + return javaType; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java b/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java index 81d57989d18c..f64346c4cf0a 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java +++ b/hibernate-core/src/main/java/org/hibernate/type/spi/TypeConfiguration.java @@ -83,6 +83,7 @@ import static org.hibernate.id.uuid.LocalObjectUuidHelper.generateLocalObjectUuid; import static org.hibernate.internal.util.NullnessUtil.castNonNull; +import static org.hibernate.internal.util.type.PrimitiveWrappers.canonicalize; import static org.hibernate.query.sqm.internal.TypecheckUtil.isNumberArray; /** @@ -760,14 +761,41 @@ private static boolean matchesJavaType(SqmExpressible type, Class javaType private final ConcurrentHashMap> basicTypeByJavaType = new ConcurrentHashMap<>(); + private static BasicType checkExisting(Class javaClass, BasicType existing) { + if ( !isCompatible( javaClass, existing.getJavaType() ) ) { + throw new IllegalStateException( "Type registration was corrupted for: " + javaClass.getName() ); + } + @SuppressWarnings("unchecked") // safe, we just checked + final var basicType = (BasicType) existing; + return basicType; + } + + private static boolean isCompatible(Class javaClass, Class existing) { + return canonicalize( javaClass ).isAssignableFrom( existing ); + } + + @Deprecated(since = "7.2", forRemoval = true) // no longer used public @Nullable BasicType getBasicTypeForGenericJavaType(Class javaType, Type... typeArguments) { //noinspection unchecked - return (BasicType) getBasicTypeForJavaType( new ParameterizedTypeImpl( javaType, typeArguments, null ) ); + return (BasicType) + getBasicTypeForJavaType( new ParameterizedTypeImpl( javaType, typeArguments, null ) ); } - public @Nullable BasicType getBasicTypeForJavaType(Class javaType) { - //noinspection unchecked - return (BasicType) getBasicTypeForJavaType( (Type) javaType ); + public @Nullable BasicType getBasicTypeForJavaType(Class javaClass) { + final var existing = basicTypeByJavaType.get( javaClass ); + if ( existing != null ) { + return checkExisting( javaClass, existing ); + } + else { + final var registeredType = basicTypeRegistry.getRegisteredType( javaClass ); + if ( registeredType != null ) { + basicTypeByJavaType.put( javaClass, registeredType ); + return registeredType; + } + else { + return null; + } + } } public @Nullable BasicType getBasicTypeForJavaType(Type javaType) { @@ -787,65 +815,64 @@ private static boolean matchesJavaType(SqmExpressible type, Class javaType } } - public BasicType standardBasicTypeForJavaType(Class javaType) { - if ( javaType == null ) { - return null; - } - else { - return standardBasicTypeForJavaType( javaType, - javaTypeDescriptor -> new BasicTypeImpl<>( javaTypeDescriptor, - javaTypeDescriptor.getRecommendedJdbcType( getCurrentBaseSqlTypeIndicators() ) ) ); - } + public BasicType standardBasicTypeForJavaType(Class javaClass) { + return javaClass == null ? null + : standardBasicTypeForJavaType( javaClass, + descriptor -> new BasicTypeImpl<>( descriptor, + descriptor.getRecommendedJdbcType( + getCurrentBaseSqlTypeIndicators() ) ) ); } public BasicType standardBasicTypeForJavaType(Type javaType) { - if ( javaType == null ) { - return null; - } - else { - return standardBasicTypeForJavaType( javaType, - javaTypeDescriptor -> new BasicTypeImpl<>( javaTypeDescriptor, - javaTypeDescriptor.getRecommendedJdbcType( getCurrentBaseSqlTypeIndicators() ) ) ); - } + return javaType == null ? null + : standardBasicTypeForJavaType( javaType, + descriptor -> new BasicTypeImpl<>( descriptor, + descriptor.getRecommendedJdbcType( + getCurrentBaseSqlTypeIndicators() ) ) ); } @Deprecated(since = "7.2", forRemoval = true) // Can be private public BasicType standardBasicTypeForJavaType( - Class javaType, + Class javaClass, Function, BasicType> creator) { - if ( javaType == null ) { + if ( javaClass == null ) { return null; } - //noinspection unchecked - return (BasicType) basicTypeByJavaType.computeIfAbsent( - javaType, - jt -> { - // See if one exists in the BasicTypeRegistry and use that one if so - final var registeredType = basicTypeRegistry.getRegisteredType( javaType ); - return registeredType != null - ? registeredType - : creator.apply( javaTypeRegistry.getDescriptor( javaType ) ); - } - ); + var existing = basicTypeByJavaType.get( javaClass ); + if ( existing != null ) { + return checkExisting( javaClass, existing ); + } + else { + // See if one exists in the BasicTypeRegistry and use that one if so + final var registeredType = + basicTypeRegistry.getRegisteredType( javaClass ); + return registeredType == null + ? creator.apply( javaTypeRegistry.resolveDescriptor( javaClass ) ) + : registeredType; + } } - @Deprecated(since = "7.2", forRemoval = true) // Due to weird signature + @Deprecated(since = "7.2", forRemoval = true) // Due to weird signature and unchecked cast public BasicType standardBasicTypeForJavaType( Type javaType, Function, BasicType> creator) { if ( javaType == null ) { return null; } - return basicTypeByJavaType.computeIfAbsent( - javaType, - jt -> { - // See if one exists in the BasicTypeRegistry and use that one if so - final var registeredType = basicTypeRegistry.getRegisteredType( javaType ); - return registeredType != null - ? registeredType - : creator.apply( javaTypeRegistry.getDescriptor( javaType ) ); - } - ); + var existing = basicTypeByJavaType.get( javaType ); + if ( existing != null ) { + return existing; + } + else { + // See if one exists in the BasicTypeRegistry and use that one if so + final var registeredType = + basicTypeRegistry.getRegisteredType( javaType ); + //noinspection unchecked + return registeredType == null + ? creator.apply( (JavaType) // UNCHECKED CAST + javaTypeRegistry.resolveDescriptor( javaType ) ) + : registeredType; + } } @SuppressWarnings("deprecation") diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/function/array/ArrayAggregateTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/function/array/ArrayAggregateTest.java index f1faea74a561..95bbd9981859 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/function/array/ArrayAggregateTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/function/array/ArrayAggregateTest.java @@ -80,7 +80,7 @@ public void contribute( jdbcTypeRegistry.getDescriptor( SqlTypes.VARCHAR ), "StringArray" ).addAuxiliaryDatabaseObjects( - new ArrayJavaType<>( javaTypeRegistry.getDescriptor( String.class ) ), + new ArrayJavaType<>( javaTypeRegistry.resolveDescriptor( String.class ) ), null, Size.nil(), metadata.getDatabase(), diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/id/usertype/inet/InetJdbcType.java b/hibernate-core/src/test/java/org/hibernate/orm/test/id/usertype/inet/InetJdbcType.java index 844ac5775c43..6a64c9e4bd22 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/id/usertype/inet/InetJdbcType.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/id/usertype/inet/InetJdbcType.java @@ -17,11 +17,11 @@ public class InetJdbcType extends PostgreSQLInetJdbcType { public static final InetJdbcType INSTANCE = new InetJdbcType(); @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Inet.class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Inet.class ); } @Override diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/converter/custom/CustomTypeConverterTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/converter/custom/CustomTypeConverterTest.java index 20a01a05e3a5..91d8d6e57eb7 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/converter/custom/CustomTypeConverterTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/converted/converter/custom/CustomTypeConverterTest.java @@ -51,7 +51,7 @@ protected void performAssertions( ); assertThat( - bootTypeConfiguration.getJavaTypeRegistry().getDescriptor( PayloadWrapper.class ), + bootTypeConfiguration.getJavaTypeRegistry().resolveDescriptor( PayloadWrapper.class ), sameInstance( PayloadWrapperJavaType.INSTANCE ) ); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/inheritance/discriminator/DiscriminatorTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/inheritance/discriminator/DiscriminatorTest.java index 75e32b28091c..f6c228afe18c 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/inheritance/discriminator/DiscriminatorTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/inheritance/discriminator/DiscriminatorTest.java @@ -5,10 +5,6 @@ package org.hibernate.orm.test.mapping.inheritance.discriminator; import java.math.BigDecimal; -import java.util.List; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Root; import org.hibernate.Hibernate; import org.hibernate.proxy.HibernateProxy; @@ -24,6 +20,7 @@ import static org.hamcrest.Matchers.instanceOf; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; @@ -38,6 +35,7 @@ xmlMappings = "org/hibernate/orm/test/mapping/inheritance/discriminator/Person.hbm.xml" ) @SessionFactory +@SuppressWarnings("deprecation") public class DiscriminatorTest { @AfterEach @@ -87,8 +85,9 @@ public void testDiscriminatorSubclass(SessionFactoryScope scope) { assertThat( s.createQuery( "from Person p where p.class = Customer" ).list().size(), is( 1 ) ); s.clear(); - List customers = s.createQuery( "from Customer c left join fetch c.salesperson" ).list(); - for ( Customer c : customers ) { + var customers = s.createQuery( "from Customer c left join fetch c.salesperson" ).list(); + for ( var customer : customers ) { + var c = (Customer) customer; assertTrue( Hibernate.isInitialized( c.getSalesperson() ) ); assertThat( c.getSalesperson().getName(), is( "Mark" ) ); } @@ -96,7 +95,8 @@ public void testDiscriminatorSubclass(SessionFactoryScope scope) { s.clear(); customers = s.createQuery( "from Customer" ).list(); - for ( Customer c : customers ) { + for ( var customer : customers ) { + var c = (Customer) customer; assertFalse( Hibernate.isInitialized( c.getSalesperson() ) ); assertThat( c.getSalesperson().getName(), is( "Mark" ) ); } @@ -164,22 +164,22 @@ public void testQuerySubclassAttribute(SessionFactoryScope scope) { q.setSalary( new BigDecimal( 1000 ) ); s.persist( q ); - List result = s.createQuery( "from Person where salary > 100" ).list(); - assertEquals( result.size(), 1 ); + var result = s.createQuery( "from Person where salary > 100" ).list(); + assertEquals( 1, result.size() ); assertSame( result.get( 0 ), q ); result = s.createQuery( "from Person where salary > 100 or name like 'E%'" ).list(); - assertEquals( result.size(), 2 ); + assertEquals( 2, result.size() ); - CriteriaBuilder criteriaBuilder = s.getCriteriaBuilder(); - CriteriaQuery criteria = criteriaBuilder.createQuery( Person.class ); - Root root = criteria.from( Person.class ); + var criteriaBuilder = s.getCriteriaBuilder(); + var criteria = criteriaBuilder.createQuery( Person.class ); + var root = criteria.from( Person.class ); criteria.where( criteriaBuilder.gt( criteriaBuilder.treat( root, Employee.class ).get( "salary" ), new BigDecimal( 100 ) ) ); result = s.createQuery( criteria ).list(); // result = s.createCriteria(Person.class) // .add( Property.forName( "salary").gt( new BigDecimal( 100) ) ) // .list(); - assertEquals( result.size(), 1 ); + assertEquals( 1, result.size() ); assertSame( result.get( 0 ), q ); //TODO: make this work: @@ -210,14 +210,14 @@ public void testLoadSuperclassProxyPolymorphicAccess(SessionFactoryScope scope) s -> { // load the superclass proxy. Person pLoad = s.getReference( Person.class, e.getId() ); - assertTrue( pLoad instanceof HibernateProxy ); + assertInstanceOf( HibernateProxy.class, pLoad ); Person pGet = s.get( Person.class, e.getId() ); Person pQuery = (Person) s.createQuery( "from Person where id = :id" ) .setParameter( "id", e.getId() ) .uniqueResult(); - CriteriaBuilder criteriaBuilder = s.getCriteriaBuilder(); - CriteriaQuery criteria = criteriaBuilder.createQuery( Person.class ); - Root root = criteria.from( Person.class ); + var criteriaBuilder = s.getCriteriaBuilder(); + var criteria = criteriaBuilder.createQuery( Person.class ); + var root = criteria.from( Person.class ); criteria.where( criteriaBuilder.equal( root.get( "id" ), e.getId() ) ); Person pCriteria = s.createQuery( criteria ).uniqueResult(); // Person pCriteria = ( Person ) s.createCriteria( Person.class ) @@ -237,14 +237,14 @@ public void testLoadSuperclassProxyPolymorphicAccess(SessionFactoryScope scope) s -> { // load the superclass proxy. Person pLoad = s.getReference( Person.class, e.getId() ); - assertTrue( pLoad instanceof HibernateProxy ); + assertInstanceOf( HibernateProxy.class, pLoad ); Person pGet = s.get( Person.class, e.getId() ); Person pQuery = (Person) s.createQuery( "from Person where id = :id" ) .setParameter( "id", e.getId() ) .uniqueResult(); - CriteriaBuilder criteriaBuilder = s.getCriteriaBuilder(); - CriteriaQuery criteria = criteriaBuilder.createQuery( Employee.class ); - Root root = criteria.from( Employee.class ); + var criteriaBuilder = s.getCriteriaBuilder(); + var criteria = criteriaBuilder.createQuery( Employee.class ); + var root = criteria.from( Employee.class ); criteria.where( criteriaBuilder.equal( root.get( "id" ), e.getId() ) ); Employee pCriteria = s.createQuery( criteria ).uniqueResult(); // Person pCriteria = ( Person ) s.createCriteria( Person.class ) @@ -281,16 +281,16 @@ public void testLoadSuperclassProxyEvictPolymorphicAccess(SessionFactoryScope sc s -> { // load the superclass proxy. Person pLoad = s.getReference( Person.class, e.getId() ); - assertTrue( pLoad instanceof HibernateProxy ); + assertInstanceOf( HibernateProxy.class, pLoad ); // evict the proxy s.evict( pLoad ); Employee pGet = (Employee) s.get( Person.class, e.getId() ); Employee pQuery = (Employee) s.createQuery( "from Person where id = :id" ) .setParameter( "id", e.getId() ) .uniqueResult(); - CriteriaBuilder criteriaBuilder = s.getCriteriaBuilder(); - CriteriaQuery criteria = criteriaBuilder.createQuery( Person.class ); - Root root = criteria.from( Person.class ); + var criteriaBuilder = s.getCriteriaBuilder(); + var criteria = criteriaBuilder.createQuery( Person.class ); + var root = criteria.from( Person.class ); criteria.where( criteriaBuilder.equal( root.get( "id" ), e.getId() ) ); Employee pCriteria = (Employee) s.createQuery( criteria ).uniqueResult(); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/type/contribution/array/StringArrayJdbcType.java b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/type/contribution/array/StringArrayJdbcType.java index 991bc3c33d49..30755f8ffc1f 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/type/contribution/array/StringArrayJdbcType.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/mapping/type/contribution/array/StringArrayJdbcType.java @@ -29,8 +29,8 @@ public int getJdbcTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping(Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( String[].class ); + public JavaType getRecommendedJavaType(Integer precision, Integer scale, TypeConfiguration typeConfiguration) { + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( String[].class ); } private final ValueBinder binder = new BasicBinder( StringArrayJavaType.INSTANCE, this ) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java index e077434751c8..0c2e69257484 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java @@ -116,7 +116,9 @@ else if ( reader != null ) { enumClass = (Class) reader.getReturnedClass().asSubclass( Enum.class ); } - final JavaType descriptor = typeConfiguration.getJavaTypeRegistry().getDescriptor( enumClass ); + final JavaType descriptor = + typeConfiguration.getJavaTypeRegistry() + .resolveDescriptor( enumClass ); enumJavaType = (EnumJavaType) descriptor; if ( parameters.containsKey( TYPE ) ) { diff --git a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java index 452fc84007ed..a3d09bced78b 100644 --- a/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java +++ b/hibernate-spatial/src/test/java/org/hibernate/spatial/testing/converter/GeometryConverterTest.java @@ -48,7 +48,7 @@ public void testConverterUsage() { final TypeConfiguration typeConfiguration = sessionFactory.getMappingMetamodel().getTypeConfiguration(); - assertThat( typeConfiguration.getJavaTypeRegistry().getDescriptor( Geometry.class ) ) + assertThat( typeConfiguration.getJavaTypeRegistry().resolveDescriptor( Geometry.class ) ) .isSameAs( GeolatteGeometryJavaType.GEOMETRY_INSTANCE ); // todo (5.3) : what to assert wrt to SqlTypeDescriptor? Anything? diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/CockroachTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/CockroachTypeContributor.java index 4680b984c17d..f80c1b90d3dc 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/CockroachTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/CockroachTypeContributor.java @@ -47,7 +47,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -55,7 +55,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/DB2VectorTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/DB2VectorTypeContributor.java index 83a2a62d1b3c..ab843cc31936 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/DB2VectorTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/DB2VectorTypeContributor.java @@ -48,7 +48,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -56,7 +56,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); @@ -64,7 +64,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.BYTE ), byteVectorJdbcType, - javaTypeRegistry.getDescriptor( byte[].class ) + javaTypeRegistry.resolveDescriptor( byte[].class ) ), StandardBasicTypes.VECTOR_INT8.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorJdbcType.java index 9c204d91ae71..30b1f2f5be89 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorJdbcType.java @@ -45,11 +45,11 @@ public int getDefaultSqlTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( float[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( float[].class ); } @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorTypeContributor.java index 599e416312bc..8723047ac9af 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/HANAVectorTypeContributor.java @@ -46,7 +46,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -54,7 +54,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); @@ -77,7 +77,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), float16VectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT16.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBTypeContributor.java index b56662a1185d..22c16d8e6576 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBTypeContributor.java @@ -45,7 +45,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -53,7 +53,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBVectorJdbcType.java index b72cd7538c30..1f377158bb8b 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MariaDBVectorJdbcType.java @@ -40,11 +40,11 @@ public int getDefaultSqlTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( float[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( float[].class ); } @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLTypeContributor.java index d6bbfeba9528..18c93371242b 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLTypeContributor.java @@ -45,7 +45,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -53,7 +53,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLVectorJdbcType.java index 71095bfce147..94acbd20a24d 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/MySQLVectorJdbcType.java @@ -43,11 +43,11 @@ public int getDefaultSqlTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( float[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( float[].class ); } @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/OracleVectorTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/OracleVectorTypeContributor.java index 4e6347b97dfe..c8b337e8f4ab 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/OracleVectorTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/OracleVectorTypeContributor.java @@ -85,7 +85,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -93,7 +93,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); @@ -101,7 +101,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.DOUBLE ), doubleVectorJdbcType, - javaTypeRegistry.getDescriptor( double[].class ) + javaTypeRegistry.resolveDescriptor( double[].class ) ), StandardBasicTypes.VECTOR_FLOAT64.getName() ); @@ -109,7 +109,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.BYTE ), byteVectorJdbcType, - javaTypeRegistry.getDescriptor( byte[].class ) + javaTypeRegistry.resolveDescriptor( byte[].class ) ), StandardBasicTypes.VECTOR_INT8.getName() ); @@ -117,7 +117,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.BYTE ), bitVectorJdbcType, - javaTypeRegistry.getDescriptor( byte[].class ) + javaTypeRegistry.resolveDescriptor( byte[].class ) ), StandardBasicTypes.VECTOR_BINARY.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGBinaryVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGBinaryVectorJdbcType.java index 6117483fab9c..49cce8bf4de5 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGBinaryVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGBinaryVectorJdbcType.java @@ -45,11 +45,11 @@ public JdbcLiteralFormatter getJdbcLiteralFormatter(JavaType javaTypeD } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( byte[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( byte[].class ); } // @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGSparseFloatVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGSparseFloatVectorJdbcType.java index b7243e1d234f..253bf2872d01 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGSparseFloatVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGSparseFloatVectorJdbcType.java @@ -39,11 +39,11 @@ public int getDefaultSqlTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( float[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( float[].class ); } @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorJdbcType.java index 1dc0d917f228..e21498916f03 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorJdbcType.java @@ -41,11 +41,11 @@ public int getDefaultSqlTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( float[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( float[].class ); } @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorTypeContributor.java index 352bc4bb28ad..cbca1c9eaf42 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/PGVectorTypeContributor.java @@ -66,7 +66,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -74,7 +74,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); @@ -82,7 +82,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), float16VectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT16.getName() ); @@ -90,7 +90,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.BYTE ), bitVectorJdbcType, - javaTypeRegistry.getDescriptor( byte[].class ) + javaTypeRegistry.resolveDescriptor( byte[].class ) ), StandardBasicTypes.VECTOR_BINARY.getName() ); diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerCastingVectorJdbcType.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerCastingVectorJdbcType.java index c496ca4a8125..228fc7ec1531 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerCastingVectorJdbcType.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerCastingVectorJdbcType.java @@ -48,11 +48,11 @@ public int getDefaultSqlTypeCode() { } @Override - public JavaType getJdbcRecommendedJavaTypeMapping( + public JavaType getRecommendedJavaType( Integer precision, Integer scale, TypeConfiguration typeConfiguration) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( float[].class ); + return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( float[].class ); } @Override diff --git a/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerTypeContributor.java b/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerTypeContributor.java index 9c095e51871c..86ef700c87ac 100644 --- a/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerTypeContributor.java +++ b/hibernate-vector/src/main/java/org/hibernate/vector/internal/SQLServerTypeContributor.java @@ -59,7 +59,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( floatBasicType, genericVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR.getName() ); @@ -67,7 +67,7 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv new BasicArrayType<>( basicTypeRegistry.resolve( StandardBasicTypes.FLOAT ), floatVectorJdbcType, - javaTypeRegistry.getDescriptor( float[].class ) + javaTypeRegistry.resolveDescriptor( float[].class ) ), StandardBasicTypes.VECTOR_FLOAT32.getName() ); diff --git a/hibernate-vector/src/test/java/org/hibernate/vector/VectorTestHelper.java b/hibernate-vector/src/test/java/org/hibernate/vector/VectorTestHelper.java index 3edc584d1315..091bb51de414 100644 --- a/hibernate-vector/src/test/java/org/hibernate/vector/VectorTestHelper.java +++ b/hibernate-vector/src/test/java/org/hibernate/vector/VectorTestHelper.java @@ -268,7 +268,7 @@ public static String vectorSparseStringLiteral(float[] vector, SessionImplemento final TypeConfiguration typeConfiguration = sessionFactory.getTypeConfiguration(); final JdbcLiteralFormatter literalFormatter = typeConfiguration.getJdbcTypeRegistry() .getDescriptor( SqlTypes.SPARSE_VECTOR_FLOAT32 ) - .getJdbcLiteralFormatter( typeConfiguration.getJavaTypeRegistry().getDescriptor( SparseFloatVector.class ) ); + .getJdbcLiteralFormatter( typeConfiguration.getJavaTypeRegistry().resolveDescriptor( SparseFloatVector.class ) ); final String jdbcLiteral = literalFormatter.toJdbcLiteral( new SparseFloatVector( vector ), sessionFactory.getJdbcServices().getDialect(), @@ -284,7 +284,7 @@ public static String vectorSparseStringLiteral(double[] vector, SessionImplement final TypeConfiguration typeConfiguration = sessionFactory.getTypeConfiguration(); final JdbcLiteralFormatter literalFormatter = typeConfiguration.getJdbcTypeRegistry() .getDescriptor( SqlTypes.SPARSE_VECTOR_FLOAT64 ) - .getJdbcLiteralFormatter( typeConfiguration.getJavaTypeRegistry().getDescriptor( SparseDoubleVector.class ) ); + .getJdbcLiteralFormatter( typeConfiguration.getJavaTypeRegistry().resolveDescriptor( SparseDoubleVector.class ) ); final String jdbcLiteral = literalFormatter.toJdbcLiteral( new SparseDoubleVector( vector ), sessionFactory.getJdbcServices().getDialect(), @@ -300,7 +300,7 @@ public static String vectorSparseStringLiteral(byte[] vector, SessionImplementor final TypeConfiguration typeConfiguration = sessionFactory.getTypeConfiguration(); final JdbcLiteralFormatter literalFormatter = typeConfiguration.getJdbcTypeRegistry() .getDescriptor( SqlTypes.SPARSE_VECTOR_INT8 ) - .getJdbcLiteralFormatter( typeConfiguration.getJavaTypeRegistry().getDescriptor( SparseByteVector.class ) ); + .getJdbcLiteralFormatter( typeConfiguration.getJavaTypeRegistry().resolveDescriptor( SparseByteVector.class ) ); final String jdbcLiteral = literalFormatter.toJdbcLiteral( new SparseByteVector( vector ), sessionFactory.getJdbcServices().getDialect(),