diff --git a/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingLegacyTests.java b/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingLegacyTests.java index 3994dd457dba..ae109ecb9a65 100644 --- a/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingLegacyTests.java +++ b/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingLegacyTests.java @@ -56,7 +56,7 @@ public void verifyMappings(SessionFactoryScope scope) { final JdbcType realType; if (intervalType instanceof AdjustableJdbcType) { realType = ((AdjustableJdbcType) intervalType).resolveIndicatedType( - () -> mappingMetamodel.getTypeConfiguration(), + mappingMetamodel.getTypeConfiguration().getCurrentBaseSqlTypeIndicators(), jdbcMapping.getJavaTypeDescriptor() ); } diff --git a/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingTests.java b/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingTests.java index 55b8baaea4a8..4f56899522c1 100644 --- a/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingTests.java +++ b/documentation/src/test/java/org/hibernate/userguide/mapping/basic/DurationMappingTests.java @@ -12,6 +12,7 @@ import jakarta.persistence.Id; import jakarta.persistence.Table; +import org.hibernate.dialect.Dialect; import org.hibernate.metamodel.mapping.JdbcMapping; import org.hibernate.metamodel.mapping.internal.BasicAttributeMapping; import org.hibernate.metamodel.spi.MappingMetamodelImplementor; @@ -46,6 +47,7 @@ public void verifyMappings(SessionFactoryScope scope) { .getMappingMetamodel(); final EntityPersister entityDescriptor = mappingMetamodel.findEntityDescriptor(EntityWithDuration.class); final JdbcTypeRegistry jdbcTypeRegistry = mappingMetamodel.getTypeConfiguration().getJdbcTypeRegistry(); + final Dialect dialect = scope.getSessionFactory().getJdbcServices().getDialect(); final BasicAttributeMapping duration = (BasicAttributeMapping) entityDescriptor.findAttributeMapping("duration"); final JdbcMapping jdbcMapping = duration.getJdbcMapping(); @@ -64,6 +66,11 @@ public TypeConfiguration getTypeConfiguration() { public int getColumnScale() { return duration.getScale() == null ? JdbcTypeIndicators.NO_COLUMN_SCALE : duration.getScale(); } + + @Override + public Dialect getDialect() { + return dialect; + } }, jdbcMapping.getJavaTypeDescriptor() ); diff --git a/documentation/src/test/java/org/hibernate/userguide/mapping/basic/InetAddressMappingTests.java b/documentation/src/test/java/org/hibernate/userguide/mapping/basic/InetAddressMappingTests.java index a1911d1cb036..5fd8a6ec28c4 100644 --- a/documentation/src/test/java/org/hibernate/userguide/mapping/basic/InetAddressMappingTests.java +++ b/documentation/src/test/java/org/hibernate/userguide/mapping/basic/InetAddressMappingTests.java @@ -53,7 +53,7 @@ public void verifyMappings(SessionFactoryScope scope) throws Exception { final JdbcType realType; if (intervalType instanceof AdjustableJdbcType) { realType = ((AdjustableJdbcType) intervalType).resolveIndicatedType( - () -> mappingMetamodel.getTypeConfiguration(), + mappingMetamodel.getTypeConfiguration().getCurrentBaseSqlTypeIndicators(), jdbcMapping.getJavaTypeDescriptor() ); } diff --git a/hibernate-community-dialects/src/test/java/org/hibernate/community/dialect/InformixDialectTestCase.java b/hibernate-community-dialects/src/test/java/org/hibernate/community/dialect/InformixDialectTestCase.java index e3af8f00c193..c9d1f8968f28 100644 --- a/hibernate-community-dialects/src/test/java/org/hibernate/community/dialect/InformixDialectTestCase.java +++ b/hibernate-community-dialects/src/test/java/org/hibernate/community/dialect/InformixDialectTestCase.java @@ -49,7 +49,7 @@ public class InformixDialectTestCase extends BaseUnitTestCase { @BeforeClass public static void init() { TypeConfiguration typeConfiguration = new TypeConfiguration(); - final JpaMetamodelImpl jpaMetamodel = new JpaMetamodelImpl(typeConfiguration, new MappingMetamodelImpl( typeConfiguration, ssr ) ); + final JpaMetamodelImpl jpaMetamodel = new JpaMetamodelImpl( typeConfiguration, new MappingMetamodelImpl( typeConfiguration, ssr ), ssr ); ssr = new StandardServiceRegistryBuilder().build(); queryEngine = new QueryEngine( diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/BootstrapContextImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/BootstrapContextImpl.java index 0d174cfe1079..1ca62cc41dd3 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/BootstrapContextImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/BootstrapContextImpl.java @@ -107,7 +107,7 @@ public BootstrapContextImpl( this.representationStrategySelector = ManagedTypeRepresentationResolverStandard.INSTANCE; this.typeConfiguration = new TypeConfiguration(); - this.beanInstanceProducer = new TypeBeanInstanceProducer( typeConfiguration ); + this.beanInstanceProducer = new TypeBeanInstanceProducer( configService ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/TypeBeanInstanceProducer.java b/hibernate-core/src/main/java/org/hibernate/boot/model/TypeBeanInstanceProducer.java index b01926478528..20c490290b96 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/TypeBeanInstanceProducer.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/TypeBeanInstanceProducer.java @@ -15,7 +15,6 @@ import org.hibernate.internal.util.ReflectHelper; import org.hibernate.resource.beans.spi.BeanInstanceProducer; import org.hibernate.type.spi.TypeBootstrapContext; -import org.hibernate.type.spi.TypeConfiguration; /** * {@link BeanInstanceProducer} implementation for building beans related to custom types. @@ -24,29 +23,27 @@ */ @Internal //TODO: move this to org.hibernate.boot.internal, where its only usage is public class TypeBeanInstanceProducer implements BeanInstanceProducer, TypeBootstrapContext { - private final TypeConfiguration typeConfiguration; + private final ConfigurationService configurationService; - public TypeBeanInstanceProducer(TypeConfiguration typeConfiguration) { - this.typeConfiguration = typeConfiguration; + public TypeBeanInstanceProducer(ConfigurationService configurationService) { + this.configurationService = configurationService; } @Override public B produceBeanInstance(Class beanType) { try { - final B type; final Constructor bootstrapContextAwareTypeConstructor = ReflectHelper.getConstructor( beanType, TypeBootstrapContext.class ); if ( bootstrapContextAwareTypeConstructor != null ) { - type = bootstrapContextAwareTypeConstructor.newInstance( this ); + return bootstrapContextAwareTypeConstructor.newInstance( this ); } else { - type = beanType.newInstance(); + return beanType.newInstance(); } - return type; } - catch (Exception e) { + catch ( Exception e ) { throw new MappingException( "Could not instantiate Type: " + beanType.getName(), e ); } } @@ -58,6 +55,6 @@ public B produceBeanInstance(String name, Class beanType) { @Override public Map getConfigurationSettings() { - return typeConfiguration.getServiceRegistry().getService( ConfigurationService.class ).getSettings(); + return configurationService.getSettings(); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java index 4d5433735d24..41f526a8b868 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotationBinder.java @@ -31,6 +31,7 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.boot.spi.InFlightMetadataCollector; import org.hibernate.boot.spi.MetadataBuildingContext; +import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.FilterDefinition; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.GenericsHelper; @@ -685,6 +686,11 @@ public int getPreferredSqlTypeCodeForInstant() { public int getPreferredSqlTypeCodeForArray() { return context.getPreferredSqlTypeCodeForArray(); } + + @Override + public Dialect getDialect() { + return context.getMetadataCollector().getDatabase().getDialect(); + } } ); return typeConfiguration.getBasicTypeRegistry().resolve( jtd, jdbcType ); 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 9b3fc3176f1a..60bfc7a9cd19 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 @@ -1023,11 +1023,9 @@ private java.lang.reflect.Type resolveJavaType(XClass returnedClassOrElement) { .toType( returnedClassOrElement ); } - private Dialect getDialect() { - return buildingContext.getBuildingOptions() - .getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(); + @Override + public Dialect getDialect() { + return buildingContext.getMetadataCollector().getDatabase().getDialect(); } private void applyJpaConverter(XProperty property, ConverterDescriptor attributeConverterDescriptor) { 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 963c6cf2f61c..b65315562004 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 @@ -12,6 +12,7 @@ import org.hibernate.TimeZoneStorageStrategy; import org.hibernate.annotations.TimeZoneStorageType; import org.hibernate.boot.spi.MetadataBuildingContext; +import org.hibernate.dialect.Dialect; import org.hibernate.mapping.BasicValue; import org.hibernate.metamodel.mapping.JdbcMapping; import org.hibernate.metamodel.model.convert.spi.BasicValueConverter; @@ -36,14 +37,12 @@ public class VersionResolution implements BasicValue.Resolution { @SuppressWarnings({"rawtypes", "unchecked"}) public static VersionResolution from( Function implicitJavaTypeAccess, - Function explicitJtdAccess, - Function explicitStdAccess, TimeZoneStorageType timeZoneStorageType, - TypeConfiguration typeConfiguration, @SuppressWarnings("unused") MetadataBuildingContext context) { // todo (6.0) : add support for Dialect-specific interpretation? + final TypeConfiguration typeConfiguration = context.getBootstrapContext().getTypeConfiguration(); final java.lang.reflect.Type implicitJavaType = implicitJavaTypeAccess.apply( typeConfiguration ); final JavaType registered = typeConfiguration.getJavaTypeRegistry().resolveDescriptor( implicitJavaType ); final BasicJavaType jtd = (BasicJavaType) registered; @@ -90,6 +89,11 @@ public int getPreferredSqlTypeCodeForInstant() { public int getPreferredSqlTypeCodeForArray() { return context.getPreferredSqlTypeCodeForArray(); } + + @Override + public Dialect getDialect() { + return context.getMetadataCollector().getDatabase().getDialect(); + } } ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java index d7ab003ab3c2..3a54727cd307 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java @@ -8,8 +8,6 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -156,7 +154,7 @@ public void addAuxiliaryDatabaseObject(AuxiliaryDatabaseObject auxiliaryDatabase } public Collection getAuxiliaryDatabaseObjects() { - return auxiliaryDatabaseObjects == null ? emptyList() : auxiliaryDatabaseObjects.values(); + return auxiliaryDatabaseObjects.values(); } public Collection getInitCommands() { diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQLIntervalSecondJdbcType.java b/hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQLIntervalSecondJdbcType.java index a9d45e3cce99..3027d08a8cd8 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQLIntervalSecondJdbcType.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/PostgreSQLIntervalSecondJdbcType.java @@ -17,7 +17,6 @@ import java.time.Duration; import org.hibernate.HibernateException; -import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.internal.util.ReflectHelper; import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.ValueBinder; @@ -107,10 +106,7 @@ public JdbcType resolveIndicatedType(JdbcTypeIndicators indicators, JavaType final int scale; if ( indicators.getColumnScale() == JdbcTypeIndicators.NO_COLUMN_SCALE ) { scale = domainJtd.getDefaultSqlScale( - indicators.getTypeConfiguration() - .getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(), + indicators.getDialect(), this ); } 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 853a5c80e0eb..600ccd5892e2 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/BasicValue.java @@ -29,10 +29,8 @@ import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; -import org.hibernate.boot.spi.BootstrapContext; import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.dialect.Dialect; -import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.ReflectHelper; @@ -44,7 +42,6 @@ import org.hibernate.resource.beans.spi.BeanInstanceProducer; import org.hibernate.resource.beans.spi.ManagedBean; import org.hibernate.resource.beans.spi.ManagedBeanRegistry; -import org.hibernate.service.ServiceRegistry; import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation; import org.hibernate.type.BasicType; import org.hibernate.type.CustomType; @@ -73,8 +70,6 @@ public class BasicValue extends SimpleValue implements JdbcTypeIndicators, Resolvable { private static final CoreMessageLogger log = CoreLogging.messageLogger( BasicValue.class ); - private final TypeConfiguration typeConfiguration; - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // incoming "configuration" values @@ -107,15 +102,11 @@ public BasicValue(MetadataBuildingContext buildingContext) { public BasicValue(MetadataBuildingContext buildingContext, Table table) { super( buildingContext, table ); - - this.typeConfiguration = buildingContext.getBootstrapContext().getTypeConfiguration(); - buildingContext.getMetadataCollector().registerValueMappingResolver( this::resolve ); } public BasicValue(BasicValue original) { super( original ); - this.typeConfiguration = original.typeConfiguration; this.explicitTypeName = original.explicitTypeName; this.explicitLocalTypeParams = original.explicitLocalTypeParams == null ? null @@ -321,12 +312,17 @@ public Resolution resolve() { final Selectable selectable = getColumn(); if ( selectable instanceof Column ) { - resolveColumn( (Column) selectable, getServiceRegistry().getService( JdbcServices.class ).getDialect() ); + resolveColumn( (Column) selectable, getDialect() ); } return resolution; } + @Override + public Dialect getDialect() { + return getMetadata().getDatabase().getDialect(); + } + private void resolveColumn(Column column, Dialect dialect) { if ( column.getSqlTypeCode() == null ) { @@ -381,7 +377,6 @@ protected Resolution buildResolution() { typeParameters, this::setTypeParameters, this, - typeConfiguration, getBuildingContext() ); } @@ -390,10 +385,7 @@ protected Resolution buildResolution() { if ( isVersion() ) { return VersionResolution.from( implicitJavaTypeAccess, - explicitJavaTypeAccess, - explicitJdbcTypeAccess, timeZoneStorageType, - typeConfiguration, getBuildingContext() ); } @@ -402,16 +394,14 @@ protected Resolution buildResolution() { // determine JavaType if we can final BasicJavaType explicitJavaType = explicitJavaTypeAccess == null ? null - : explicitJavaTypeAccess.apply( typeConfiguration ); + : explicitJavaTypeAccess.apply( getTypeConfiguration() ); final JavaType javaType = determineJavaType( explicitJavaType ); final ConverterDescriptor attributeConverterDescriptor = getAttributeConverterDescriptor(); final Selectable column = getColumn(); if ( attributeConverterDescriptor != null ) { - final ManagedBeanRegistry managedBeanRegistry = getBuildingContext().getBootstrapContext() - .getServiceRegistry() - .getService( ManagedBeanRegistry.class ); + final ManagedBeanRegistry managedBeanRegistry = getServiceRegistry().getService( ManagedBeanRegistry.class ); final NamedConverterResolution converterResolution = NamedConverterResolution.from( attributeConverterDescriptor, @@ -426,7 +416,7 @@ public ManagedBeanRegistry getManagedBeanRegistry() { } @Override public TypeConfiguration getTypeConfiguration() { - return typeConfiguration; + return BasicValue.this.getTypeConfiguration(); } }, getBuildingContext() @@ -441,13 +431,13 @@ public TypeConfiguration getTypeConfiguration() { final BasicType registeredElementType = converterResolution.getLegacyResolvedBasicType(); final BasicType registeredType = registeredElementType == null ? null : containerJtd.resolveType( - typeConfiguration, - getMetadata().getDatabase().getDialect(), + getTypeConfiguration(), + getDialect(), registeredElementType, column instanceof ColumnTypeInformation ? (ColumnTypeInformation) column : null ); if ( registeredType != null ) { - typeConfiguration.getBasicTypeRegistry().register( registeredType ); + getTypeConfiguration().getBasicTypeRegistry().register( registeredType ); return new InferredBasicValueResolution( registeredType, @@ -464,11 +454,11 @@ public TypeConfiguration getTypeConfiguration() { } final JdbcType jdbcType = explicitJdbcTypeAccess != null - ? explicitJdbcTypeAccess.apply( typeConfiguration ) + ? explicitJdbcTypeAccess.apply( getTypeConfiguration() ) : null; final JavaType basicJavaType = javaType == null && jdbcType != null - ? jdbcType.getJdbcRecommendedJavaTypeMapping( null, null, typeConfiguration ) + ? jdbcType.getJdbcRecommendedJavaTypeMapping( null, null, getTypeConfiguration() ) : javaType; if ( basicJavaType == null ) { throw new MappingException( "Unable to determine JavaType to use : " + this ); @@ -493,8 +483,8 @@ public TypeConfiguration getTypeConfiguration() { column, ownerName, propertyName, - getMetadata().getDatabase().getDialect(), - typeConfiguration + getDialect(), + getTypeConfiguration() ); } } @@ -504,9 +494,9 @@ private JavaType determineJavaType(JavaType explicitJavaType) { if ( javaType == null ) { if ( implicitJavaTypeAccess != null ) { - final java.lang.reflect.Type implicitJtd = implicitJavaTypeAccess.apply( typeConfiguration ); + final java.lang.reflect.Type implicitJtd = implicitJavaTypeAccess.apply( getTypeConfiguration() ); if ( implicitJtd != null ) { - javaType = typeConfiguration.getJavaTypeRegistry().getDescriptor( implicitJtd ); + javaType = getTypeConfiguration().getJavaTypeRegistry().getDescriptor( implicitJtd ); } } } @@ -528,16 +518,13 @@ private JavaType determineReflectedJavaType() { impliedJavaType = resolvedJavaType; } else if ( implicitJavaTypeAccess != null ) { - impliedJavaType = implicitJavaTypeAccess.apply( typeConfiguration ); + impliedJavaType = implicitJavaTypeAccess.apply( getTypeConfiguration() ); } else if ( ownerName != null && propertyName != null ) { - final ServiceRegistry serviceRegistry = typeConfiguration.getServiceRegistry(); - final ClassLoaderService classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); - impliedJavaType = ReflectHelper.reflectedPropertyType( ownerName, propertyName, - classLoaderService + getServiceRegistry().getService( ClassLoaderService.class ) ); } else { @@ -550,10 +537,9 @@ else if ( ownerName != null && propertyName != null ) { return null; } - return typeConfiguration.getJavaTypeRegistry().resolveDescriptor( impliedJavaType ); + return getTypeConfiguration().getJavaTypeRegistry().resolveDescriptor( impliedJavaType ); } - private static Resolution interpretExplicitlyNamedType( String name, Function explicitJtdAccess, @@ -563,11 +549,11 @@ private static Resolution interpretExplicitlyNamedType( Map localTypeParams, Consumer combinedParameterConsumer, JdbcTypeIndicators stdIndicators, - TypeConfiguration typeConfiguration, MetadataBuildingContext context) { final StandardServiceRegistry serviceRegistry = context.getBootstrapContext().getServiceRegistry(); final ManagedBeanRegistry managedBeanRegistry = serviceRegistry.getService( ManagedBeanRegistry.class ); + final TypeConfiguration typeConfiguration = context.getBootstrapContext().getTypeConfiguration(); final JpaAttributeConverterCreationContext converterCreationContext = new JpaAttributeConverterCreationContext() { @Override @@ -653,7 +639,7 @@ public TypeConfiguration getTypeConfiguration() { // see if the name is a UserType or BasicType implementor class name - final ClassLoaderService cls = typeConfiguration.getServiceRegistry().getService( ClassLoaderService.class ); + final ClassLoaderService cls = serviceRegistry.getService( ClassLoaderService.class ); try { final Class typeNamedClass = cls.classForName( name ); @@ -726,7 +712,7 @@ public int getPreferredSqlTypeCodeForArray() { public int resolveJdbcTypeCode(int jdbcTypeCode) { return aggregateColumn == null ? jdbcTypeCode - : getMetadata().getDatabase().getDialect().getAggregateSupport() + : getDialect().getAggregateSupport() .aggregateComponentSqlTypeCode( aggregateColumn.getSqlTypeCode(), jdbcTypeCode ); } @@ -754,11 +740,6 @@ public static TimeZoneStorageStrategy timeZoneStorageStrategy( return buildingContext.getBuildingOptions().getDefaultTimeZoneStorage(); } - @Override - public TypeConfiguration getTypeConfiguration() { - return typeConfiguration; - } - public void setExplicitTypeParams(Map explicitLocalTypeParams) { this.explicitLocalTypeParams = explicitLocalTypeParams; } @@ -771,11 +752,7 @@ public void setTypeName(String typeName) { if ( StringHelper.isNotEmpty( typeName ) ) { if ( typeName.startsWith( ConverterDescriptor.TYPE_NAME_PREFIX ) ) { final String converterClassName = typeName.substring( ConverterDescriptor.TYPE_NAME_PREFIX.length() ); - final ClassLoaderService cls = getBuildingContext() - .getMetadataCollector() - .getMetadataBuildingOptions() - .getServiceRegistry() - .getService( ClassLoaderService.class ); + final ClassLoaderService cls = getServiceRegistry().getService( ClassLoaderService.class ); try { final Class> converterClass = cls.classForName( converterClassName ); setAttributeConverterDescriptor( new ClassBasedConverterDescriptor( @@ -805,8 +782,8 @@ public > void setExplicitCustomType(Class explicitCusto throw new UnsupportedOperationException( "Unsupported attempt to set an explicit-custom-type when value is already resolved" ); } - final BootstrapContext bootstrapContext = getBuildingContext().getBootstrapContext(); - final BeanInstanceProducer instanceProducer = bootstrapContext.getCustomTypeProducer(); + final BeanInstanceProducer instanceProducer = + getBuildingContext().getBootstrapContext().getCustomTypeProducer(); final Properties properties = new Properties(); if ( CollectionHelper.isNotEmpty( getTypeParameters() ) ) { @@ -818,23 +795,19 @@ public > void setExplicitCustomType(Class explicitCusto final ManagedBean typeBean; if ( properties.isEmpty() ) { - typeBean = bootstrapContext - .getServiceRegistry() - .getService( ManagedBeanRegistry.class ) + typeBean = getServiceRegistry().getService( ManagedBeanRegistry.class ) .getBean( explicitCustomType, instanceProducer ); } else { final String name = explicitCustomType.getName() + COUNTER++; - typeBean = bootstrapContext - .getServiceRegistry() - .getService( ManagedBeanRegistry.class ) + typeBean = getServiceRegistry().getService( ManagedBeanRegistry.class ) .getBean( name, explicitCustomType, instanceProducer ); } final T typeInstance = typeBean.getBeanInstance(); if ( typeInstance instanceof TypeConfigurationAware ) { - ( (TypeConfigurationAware) typeInstance ).setTypeConfiguration( typeConfiguration ); + ( (TypeConfigurationAware) typeInstance ).setTypeConfiguration( getTypeConfiguration() ); } if ( typeInstance instanceof DynamicParameterizedType ) { @@ -851,7 +824,7 @@ public > void setExplicitCustomType(Class explicitCusto setTypeParameters( properties ); this.resolution = new UserTypeResolution( - new CustomType<>( (UserType) typeInstance, typeConfiguration ), + new CustomType<>( (UserType) typeInstance, getTypeConfiguration() ), null, properties ); diff --git a/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java b/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java index 078edb688d83..c9d8d9012990 100644 --- a/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java +++ b/hibernate-core/src/main/java/org/hibernate/mapping/SimpleValue.java @@ -155,6 +155,10 @@ public ServiceRegistry getServiceRegistry() { return getMetadata().getMetadataBuildingOptions().getServiceRegistry(); } + public TypeConfiguration getTypeConfiguration() { + return getBuildingContext().getBootstrapContext().getTypeConfiguration(); + } + public void setOnDeleteAction(OnDeleteAction onDeleteAction) { this.onDeleteAction = onDeleteAction; } @@ -730,6 +734,11 @@ public TypeConfiguration getTypeConfiguration() { public TimeZoneStorageStrategy getDefaultTimeZoneStorageStrategy() { return buildingContext.getBuildingOptions().getDefaultTimeZoneStorage(); } + + @Override + public Dialect getDialect() { + return buildingContext.getMetadataCollector().getDatabase().getDialect(); + } } ); int jdbcTypeCode = recommendedJdbcType.getDdlTypeCode(); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java index 87b41369aec5..e6a13c7946cd 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/JpaMetamodel.java @@ -41,9 +41,7 @@ public interface JpaMetamodel extends Metamodel { */ TypeConfiguration getTypeConfiguration(); - default ServiceRegistry getServiceRegistry() { - return getTypeConfiguration().getServiceRegistry(); - } + ServiceRegistry getServiceRegistry(); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java index ccc3f090e8b1..d61113406e65 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/JpaMetamodelImpl.java @@ -51,6 +51,7 @@ import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor; import org.hibernate.metamodel.spi.RuntimeModelCreationContext; import org.hibernate.query.sqm.tree.domain.SqmPolymorphicRootDescriptor; +import org.hibernate.service.ServiceRegistry; import org.hibernate.type.descriptor.java.JavaType; import org.hibernate.type.descriptor.java.spi.DynamicModelJavaType; import org.hibernate.type.descriptor.java.spi.EntityJavaType; @@ -85,6 +86,7 @@ private static class ImportInfo { private final TypeConfiguration typeConfiguration; private final MappingMetamodel mappingMetamodel; + private final ServiceRegistry serviceRegistry; private final Map> jpaEntityTypeMap = new TreeMap<>(); // Need ordering for deterministic implementers list in SqmPolymorphicRootDescriptor private final Map, ManagedDomainType> jpaManagedTypeMap = new HashMap<>(); @@ -102,9 +104,13 @@ private static class ImportInfo { private final Map knownInvalidnameToImportMap = new ConcurrentHashMap<>(); - public JpaMetamodelImpl(TypeConfiguration typeConfiguration, MappingMetamodel mappingMetamodel) { + public JpaMetamodelImpl( + TypeConfiguration typeConfiguration, + MappingMetamodel mappingMetamodel, + ServiceRegistry serviceRegistry) { this.typeConfiguration = typeConfiguration; this.mappingMetamodel = mappingMetamodel; + this.serviceRegistry = serviceRegistry; } @Override @@ -112,6 +118,11 @@ public TypeConfiguration getTypeConfiguration() { return typeConfiguration; } + @Override + public ServiceRegistry getServiceRegistry() { + return serviceRegistry; + } + @Override public JpaCompliance getJpaCompliance() { return typeConfiguration.getJpaCompliance(); 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 a36f91d5f2be..de2d3b8c9c3a 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 @@ -165,7 +165,7 @@ public class MappingMetamodelImpl implements MappingMetamodelImplementor, Metamo public MappingMetamodelImpl(TypeConfiguration typeConfiguration, ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; this.typeConfiguration = typeConfiguration; - this.jpaMetamodel = new JpaMetamodelImpl( typeConfiguration, this ); + this.jpaMetamodel = new JpaMetamodelImpl( typeConfiguration, this, serviceRegistry ); } public JpaMetamodelImplementor getJpaMetamodel() { @@ -361,6 +361,11 @@ public TypeConfiguration getTypeConfiguration() { return typeConfiguration; } + @Override + public ServiceRegistry getServiceRegistry() { + return serviceRegistry; + } + @Override public void forEachEntityDescriptor(Consumer action) { entityPersisterMap.values().forEach( action ); diff --git a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java index 3520f431bda2..f803f486f1ff 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingImpl.java @@ -105,7 +105,7 @@ public void setBindValue(T value, boolean resolveJdbcTypeIfNecessary) { return; } - if ( ! getTypeConfiguration().getJpaCompliance().isLoadByIdComplianceEnabled() ) { + if ( ! sessionFactory.getSessionFactoryOptions().getJpaCompliance().isLoadByIdComplianceEnabled() ) { try { if ( bindType != null ) { value = coerce( value, bindType ); @@ -211,7 +211,7 @@ public void setBindValue(T value, TemporalType temporalTypePrecision) { bindType = queryParameter.getHibernateType(); } - if ( ! getTypeConfiguration().getJpaCompliance().isLoadByIdComplianceEnabled() ) { + if ( ! sessionFactory.getSessionFactoryOptions().getJpaCompliance().isLoadByIdComplianceEnabled() ) { if ( bindType != null ) { try { value = coerce( value, bindType ); 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 5269de58eaa0..6e51f56175de 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 @@ -34,6 +34,7 @@ import org.hibernate.LockMode; import org.hibernate.QueryException; import org.hibernate.boot.model.process.internal.InferredBasicValueResolver; +import org.hibernate.dialect.Dialect; import org.hibernate.dialect.function.TimestampaddFunction; import org.hibernate.dialect.function.TimestampdiffFunction; import org.hibernate.engine.FetchTiming; @@ -611,6 +612,11 @@ protected SqmStatement getStatement() { return statement; } + @Override + public Dialect getDialect() { + return creationContext.getSessionFactory().getJdbcServices().getDialect(); + } + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SqlTypeDescriptorIndicators diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/ResultSetAccess.java b/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/ResultSetAccess.java index e4cc70cb14b1..cf20910c8266 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/ResultSetAccess.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/jdbc/internal/ResultSetAccess.java @@ -128,6 +128,11 @@ public int getColumnScale() { public EnumType getEnumeratedType() { return resolvedJdbcType.isNumber() ? EnumType.ORDINAL : EnumType.STRING; } + + @Override + public Dialect getDialect() { + return getFactory().getJdbcServices().getDialect(); + } } ); } diff --git a/hibernate-core/src/main/java/org/hibernate/type/EnumType.java b/hibernate-core/src/main/java/org/hibernate/type/EnumType.java index ebb7a4419be0..c89e6f9ef872 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/EnumType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/EnumType.java @@ -19,6 +19,7 @@ import org.hibernate.AssertionFailure; import org.hibernate.HibernateException; import org.hibernate.annotations.Nationalized; +import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.CoreLogging; @@ -508,5 +509,10 @@ private boolean isNationalized(ParameterType reader) { public long getColumnLength() { return columnLength == null ? NO_COLUMN_LENGTH : columnLength; } + + @Override + public Dialect getDialect() { + return typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(); + } } } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/AbstractArrayJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/AbstractArrayJavaType.java index 54717f241be3..9b6ef16bc6e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/AbstractArrayJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/AbstractArrayJavaType.java @@ -48,9 +48,7 @@ public JdbcType getRecommendedJdbcType(JdbcTypeIndicators indicators) { if ( jdbcType instanceof ArrayJdbcType ) { return ( (ArrayJdbcType) jdbcType ).resolveType( typeConfiguration, - typeConfiguration.getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(), + indicators.getDialect(), recommendedComponentJdbcType, ColumnTypeInformation.EMPTY ); 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 7990d9735174..e5fadac94d5a 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 @@ -20,7 +20,6 @@ import org.hibernate.internal.util.ReflectHelper; import org.hibernate.internal.util.compare.ComparableComparator; import org.hibernate.sql.ast.spi.SqlAppender; -import org.hibernate.sql.ast.spi.StringBuilderSqlAppender; import org.hibernate.type.descriptor.WrapperOptions; import org.hibernate.type.descriptor.jdbc.JdbcType; import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators; diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/BasicCollectionJavaType.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/BasicCollectionJavaType.java index 68ff2ed11998..27c0853bd5e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/BasicCollectionJavaType.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/java/spi/BasicCollectionJavaType.java @@ -74,9 +74,7 @@ public JdbcType getRecommendedJdbcType(JdbcTypeIndicators indicators) { final TypeConfiguration typeConfiguration = indicators.getTypeConfiguration(); return ( (ArrayJdbcType) jdbcType ).resolveType( typeConfiguration, - typeConfiguration.getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(), + indicators.getDialect(), recommendedComponentJdbcType, ColumnTypeInformation.EMPTY ); 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 654c9f0ff6fa..eda2848e4631 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 @@ -61,12 +61,7 @@ public MutabilityPlan determineMutabilityPlan(Type javaType, TypeConfigur if ( javaTypeClass.isAnnotationPresent( Mutability.class ) ) { final Mutability annotation = javaTypeClass.getAnnotation( Mutability.class ); - final Class> planClass = annotation.value(); - final ManagedBeanRegistry managedBeanRegistry = typeConfiguration - .getServiceRegistry() - .getService( ManagedBeanRegistry.class ); - final ManagedBean> planBean = managedBeanRegistry.getBean( planClass ); - return (MutabilityPlan) planBean.getBeanInstance(); + return typeConfiguration.createMutabilityPlan( annotation.value() ); } if ( javaTypeClass.isEnum() ) { 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 cc8dc61fad70..a9323a80dad5 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 @@ -12,11 +12,9 @@ import java.sql.SQLException; import java.sql.Types; -import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.type.descriptor.ValueBinder; import org.hibernate.type.descriptor.ValueExtractor; import org.hibernate.type.descriptor.WrapperOptions; -import org.hibernate.type.descriptor.java.BasicJavaType; import org.hibernate.type.descriptor.java.JavaType; import org.hibernate.type.descriptor.jdbc.internal.JdbcLiteralFormatterNumericData; import org.hibernate.type.spi.TypeConfiguration; @@ -52,8 +50,11 @@ public JavaType getJdbcRecommendedJavaTypeMapping( Integer length, Integer scale, TypeConfiguration typeConfiguration) { - if ( length != null && length <= typeConfiguration.getServiceRegistry().getService( JdbcServices.class ).getDialect().getFloatPrecision() ) { - return typeConfiguration.getJavaTypeRegistry().getDescriptor( Float.class ); + if ( length != null ) { + int floatPrecision = typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect().getFloatPrecision(); + if ( length <= floatPrecision ) { + return typeConfiguration.getJavaTypeRegistry().getDescriptor( Float.class ); + } } return typeConfiguration.getJavaTypeRegistry().getDescriptor( Double.class ); } diff --git a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java index 6a36e91dcfc8..4fda5c2338bf 100644 --- a/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java +++ b/hibernate-core/src/main/java/org/hibernate/type/descriptor/jdbc/JdbcTypeIndicators.java @@ -11,6 +11,7 @@ import org.hibernate.AssertionFailure; import org.hibernate.TimeZoneStorageStrategy; +import org.hibernate.dialect.Dialect; import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.java.BasicJavaType; import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry; @@ -237,4 +238,6 @@ default int getDefaultZonedTimestampSqlType() { throw new IllegalArgumentException( "Unexpected jakarta.persistence.TemporalType : " + temporalPrecision); } } + + Dialect getDialect(); } 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 6c79a4efbb1b..32a74ced61ed 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 @@ -91,10 +91,7 @@ else if ( shouldUseMaterializedLob( indicators ) ) { } protected boolean shouldUseMaterializedLob(JdbcTypeIndicators indicators) { - final Dialect dialect = indicators.getTypeConfiguration() - .getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(); + final Dialect dialect = indicators.getDialect(); final long length = indicators.getColumnLength(); final long maxLength = indicators.isNationalized() ? dialect.getMaxNVarcharCapacity() : 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 e4cff7ebbb54..5beb876a357a 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 @@ -88,10 +88,7 @@ else if ( shouldUseMaterializedLob( indicators ) ) { } protected boolean shouldUseMaterializedLob(JdbcTypeIndicators indicators) { - final Dialect dialect = indicators.getTypeConfiguration() - .getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(); + final Dialect dialect = indicators.getDialect(); final long length = indicators.getColumnLength(); final long maxLength = dialect.getMaxVarbinaryCapacity(); return length > maxLength && dialect.useMaterializedLobWhenCapacityExceeded(); 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 71fdbee6d24f..d7e915c3065e 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 @@ -89,10 +89,7 @@ else if ( shouldUseMaterializedLob( indicators ) ) { } protected boolean shouldUseMaterializedLob(JdbcTypeIndicators indicators) { - final Dialect dialect = indicators.getTypeConfiguration() - .getServiceRegistry() - .getService( JdbcServices.class ) - .getDialect(); + final Dialect dialect = indicators.getDialect(); final long length = indicators.getColumnLength(); final long maxLength = indicators.isNationalized() ? dialect.getMaxNVarcharCapacity() : 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 2aa0f8130ae4..8835fee21324 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 @@ -41,6 +41,7 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.boot.spi.BasicTypeRegistration; import org.hibernate.boot.spi.MetadataBuildingContext; +import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.id.uuid.LocalObjectUuidHelper; import org.hibernate.internal.CoreMessageLogger; @@ -56,12 +57,15 @@ import org.hibernate.query.internal.QueryHelper; import org.hibernate.query.sqm.SqmExpressible; import org.hibernate.query.sqm.tree.SqmTypedNode; +import org.hibernate.resource.beans.spi.ManagedBean; +import org.hibernate.resource.beans.spi.ManagedBeanRegistry; import org.hibernate.service.ServiceRegistry; import org.hibernate.type.BasicType; import org.hibernate.type.BasicTypeRegistry; import org.hibernate.type.SqlTypes; import org.hibernate.type.StandardBasicTypes; import org.hibernate.type.descriptor.java.JavaType; +import org.hibernate.type.descriptor.java.MutabilityPlan; import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry; import org.hibernate.type.descriptor.jdbc.JdbcType; import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators; @@ -231,7 +235,10 @@ public SessionFactoryImplementor getSessionFactory() { * is obtained. * * @return The {@link ServiceRegistry} for the current scope + * + * @deprecated This simply isn't a very sensible place to hang the {@link ServiceRegistry} */ + @Deprecated(since = "6.2") public ServiceRegistry getServiceRegistry() { return scope.getServiceRegistry(); } @@ -345,14 +352,14 @@ public BasicValuedMapping resolveCastTargetType(String name) { } try { - final ClassLoaderService cls = getServiceRegistry().getService( ClassLoaderService.class ); - final Class javaTypeClass = cls.classForName( name ); - + final Class javaTypeClass = + scope.getServiceRegistry().getService( ClassLoaderService.class ) + .classForName( name ); final JavaType jtd = javaTypeRegistry.resolveDescriptor( javaTypeClass ); final JdbcType jdbcType = jtd.getRecommendedJdbcType( getCurrentBaseSqlTypeIndicators() ); return basicTypeRegistry.resolve( jtd, jdbcType ); } - catch (Exception ignore) { + catch ( Exception ignore ) { } throw new HibernateException( "unrecognized cast target type: " + name ); @@ -444,6 +451,13 @@ public int getPreferredSqlTypeCodeForArray() { : sessionFactory.getSessionFactoryOptions().getPreferredSqlTypeCodeForArray(); } + @Override + public Dialect getDialect() { + return sessionFactory == null + ? metadataBuildingContext.getMetadataCollector().getDatabase().getDialect() + : sessionFactory.getJdbcServices().getDialect(); + } + private Scope(TypeConfiguration typeConfiguration) { this.typeConfiguration = typeConfiguration; } @@ -789,4 +803,12 @@ public static boolean isDuration(SqmExpressible type) { return matchesJavaType( type, Duration.class ); } + @Internal @SuppressWarnings("unchecked") + public MutabilityPlan createMutabilityPlan(Class> planClass) { + final ManagedBean> planBean = + scope.getServiceRegistry() + .getService( ManagedBeanRegistry.class ) + .getBean( planClass ); + return (MutabilityPlan) planBean.getBeanInstance(); + } } diff --git a/hibernate-testing/src/test/java/org/hibernate/testing/annotations/methods/DomainModelTesting.java b/hibernate-testing/src/test/java/org/hibernate/testing/annotations/methods/DomainModelTesting.java index 79b084863a64..3bba1a330eb4 100644 --- a/hibernate-testing/src/test/java/org/hibernate/testing/annotations/methods/DomainModelTesting.java +++ b/hibernate-testing/src/test/java/org/hibernate/testing/annotations/methods/DomainModelTesting.java @@ -47,9 +47,7 @@ private void classLevelAssertions(DomainModelScope scope) { } private void settingAssertions(DomainModelScope scope) { - final org.hibernate.service.ServiceRegistry serviceRegistry = ( (MetadataImplementor) scope.getDomainModel() ) - .getTypeConfiguration() - .getServiceRegistry(); + final org.hibernate.service.ServiceRegistry serviceRegistry = scope.getDomainModel().getDatabase().getServiceRegistry(); final ConfigurationService configurationService = serviceRegistry.getService( ConfigurationService.class ); assertThat( configurationService.getSettings().get( "simple" ) ).isEqualTo( "simple-value" ); }