HHH-12444 - Introduce BootstrapContext
HHH-12443 - Introduce TypeConfiguration
This commit is contained in:
parent
170caf0076
commit
6f798598a2
|
@ -37,6 +37,11 @@ public interface MetadataImplementor extends Metadata, Mapping {
|
|||
*/
|
||||
MetadataBuildingOptions getMetadataBuildingOptions();
|
||||
|
||||
/**
|
||||
* Access to the TypeConfiguration
|
||||
*
|
||||
* @return Access to the TypeConfiguration
|
||||
*/
|
||||
TypeConfiguration getTypeConfiguration();
|
||||
|
||||
/**
|
||||
|
|
|
@ -125,7 +125,6 @@ import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator;
|
|||
import org.hibernate.type.SerializableType;
|
||||
import org.hibernate.type.Type;
|
||||
import org.hibernate.type.TypeResolver;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
|
@ -173,7 +172,7 @@ public final class SessionFactoryImpl implements SessionFactoryImplementor {
|
|||
|
||||
// todo : org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor too?
|
||||
|
||||
private final transient MetamodelImpl metamodel;
|
||||
private final transient MetamodelImplementor metamodel;
|
||||
private final transient CriteriaBuilderImpl criteriaBuilder;
|
||||
private final PersistenceUnitUtil jpaPersistenceUnitUtil;
|
||||
private final transient CacheImplementor cacheAccess;
|
||||
|
@ -189,7 +188,6 @@ public final class SessionFactoryImpl implements SessionFactoryImplementor {
|
|||
private final transient Map<String, FilterDefinition> filters;
|
||||
private final transient Map<String, FetchProfile> fetchProfiles;
|
||||
|
||||
private final transient TypeResolver typeResolver;
|
||||
private final transient TypeHelper typeHelper;
|
||||
|
||||
public SessionFactoryImpl(
|
||||
|
@ -245,10 +243,8 @@ public final class SessionFactoryImpl implements SessionFactoryImplementor {
|
|||
for ( SessionFactoryObserver sessionFactoryObserver : options.getSessionFactoryObservers() ) {
|
||||
this.observer.addObserver( sessionFactoryObserver );
|
||||
}
|
||||
TypeConfiguration typeConfiguration = metadata.getTypeConfiguration();
|
||||
typeConfiguration.scope( this );
|
||||
this.typeResolver = typeConfiguration.getTypeResolver();
|
||||
this.typeHelper = new TypeLocatorImpl( typeResolver );
|
||||
|
||||
this.typeHelper = new TypeLocatorImpl( metadata.getTypeConfiguration().getTypeResolver() );
|
||||
|
||||
this.filters = new HashMap<>();
|
||||
this.filters.putAll( metadata.getFilterDefinitions() );
|
||||
|
@ -295,8 +291,11 @@ public final class SessionFactoryImpl implements SessionFactoryImplementor {
|
|||
|
||||
LOG.debug( "Instantiated session factory" );
|
||||
|
||||
this.metamodel = new MetamodelImpl( this );
|
||||
this.metamodel.initialize( metadata, determineJpaMetaModelPopulationSetting( properties ) );
|
||||
this.metamodel = metadata.getTypeConfiguration().scope( this , bootstrapContext);
|
||||
( (MetamodelImpl) this.metamodel ).initialize(
|
||||
metadata,
|
||||
determineJpaMetaModelPopulationSetting( properties )
|
||||
);
|
||||
|
||||
//Named Queries:
|
||||
this.namedQueryRepository = metadata.buildNamedQueryRepository( this );
|
||||
|
@ -563,7 +562,7 @@ public final class SessionFactoryImpl implements SessionFactoryImplementor {
|
|||
*/
|
||||
@Deprecated
|
||||
public TypeResolver getTypeResolver() {
|
||||
return typeResolver;
|
||||
return metamodel.getTypeConfiguration().getTypeResolver();
|
||||
}
|
||||
|
||||
public QueryPlanCache getQueryPlanCache() {
|
||||
|
|
|
@ -65,6 +65,7 @@ import org.hibernate.persister.spi.PersisterFactory;
|
|||
import org.hibernate.tuple.entity.EntityTuplizer;
|
||||
import org.hibernate.type.AssociationType;
|
||||
import org.hibernate.type.Type;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
/**
|
||||
* Hibernate implementation of the JPA {@link javax.persistence.metamodel.Metamodel} contract.
|
||||
|
@ -94,8 +95,11 @@ public class MetamodelImpl implements MetamodelImplementor, Serializable {
|
|||
|
||||
private final transient Map<String,EntityGraph> entityGraphMap = new ConcurrentHashMap<>();
|
||||
|
||||
public MetamodelImpl(SessionFactoryImplementor sessionFactory) {
|
||||
private final TypeConfiguration typeConfiguration;
|
||||
|
||||
public MetamodelImpl(SessionFactoryImplementor sessionFactory, TypeConfiguration typeConfiguration) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.typeConfiguration = typeConfiguration;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -493,6 +497,11 @@ public class MetamodelImpl implements MetamodelImplementor, Serializable {
|
|||
// this.entityTypesByEntityName = entityTypesByEntityName;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public TypeConfiguration getTypeConfiguration() {
|
||||
return typeConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionFactoryImplementor getSessionFactory() {
|
||||
return sessionFactory;
|
||||
|
|
|
@ -18,11 +18,19 @@ import org.hibernate.Metamodel;
|
|||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.persister.collection.CollectionPersister;
|
||||
import org.hibernate.persister.entity.EntityPersister;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public interface MetamodelImplementor extends Metamodel {
|
||||
/**
|
||||
* Access to the TypeConfiguration in effect for this SessionFactory/Metamodel
|
||||
*
|
||||
* @return Access to the TypeConfiguration
|
||||
*/
|
||||
TypeConfiguration getTypeConfiguration();
|
||||
|
||||
@Override
|
||||
SessionFactoryImplementor getSessionFactory();
|
||||
|
||||
|
|
|
@ -7,25 +7,27 @@
|
|||
package org.hibernate.type.spi;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.Incubating;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.SessionFactoryObserver;
|
||||
import org.hibernate.boot.cfgxml.spi.CfgXmlAccessService;
|
||||
import org.hibernate.boot.spi.BootstrapContext;
|
||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.internal.SessionFactoryImpl;
|
||||
import org.hibernate.internal.SessionFactoryRegistry;
|
||||
import org.hibernate.metamodel.internal.MetamodelImpl;
|
||||
import org.hibernate.metamodel.spi.MetamodelImplementor;
|
||||
import org.hibernate.type.BasicTypeRegistry;
|
||||
import org.hibernate.type.Type;
|
||||
import org.hibernate.type.TypeFactory;
|
||||
import org.hibernate.type.TypeResolver;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import static org.hibernate.internal.CoreLogging.logger;
|
||||
import static org.hibernate.internal.CoreLogging.messageLogger;
|
||||
|
||||
/**
|
||||
|
@ -57,6 +59,9 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
|||
|
||||
private final BasicTypeRegistry basicTypeRegistry;
|
||||
|
||||
private final Map<String,String> importMap = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
// temporarily needed to support deprecations
|
||||
private final TypeResolver typeResolver;
|
||||
|
||||
|
@ -86,6 +91,10 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
|||
return basicTypeRegistry;
|
||||
}
|
||||
|
||||
public Map<String, String> getImportMap() {
|
||||
return Collections.unmodifiableMap( importMap );
|
||||
}
|
||||
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Scoping
|
||||
|
||||
|
@ -108,10 +117,24 @@ public class TypeConfiguration implements SessionFactoryObserver, Serializable {
|
|||
scope.setMetadataBuildingContext( metadataBuildingContext );
|
||||
}
|
||||
|
||||
public void scope(SessionFactoryImpl sessionFactory) {
|
||||
public MetamodelImplementor scope(SessionFactoryImplementor sessionFactory, BootstrapContext bootstrapContext) {
|
||||
log.debugf( "Scoping TypeConfiguration [%s] to SessionFactoryImpl [%s]", this, sessionFactory );
|
||||
scope.setSessionFactory( sessionFactory );
|
||||
typeFactory.injectSessionFactory( sessionFactory );
|
||||
log.debugf( "Scoping TypeConfiguration [%s] to SessionFactory [%s]", this, sessionFactory );
|
||||
|
||||
for ( Map.Entry<String, String> importEntry : scope.metadataBuildingContext.getMetadataCollector().getImports().entrySet() ) {
|
||||
if ( importMap.containsKey( importEntry.getKey() ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
importMap.put( importEntry.getKey(), importEntry.getValue() );
|
||||
}
|
||||
|
||||
scope.setSessionFactory( sessionFactory );
|
||||
sessionFactory.addObserver( this );
|
||||
MetamodelImpl metamodel = new MetamodelImpl( sessionFactory, this );
|
||||
return metamodel;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -94,7 +94,7 @@ public class MetadataTest extends BaseEntityManagerFunctionalTestCase {
|
|||
.addAnnotatedClass( WithGenericCollection.class )
|
||||
.buildMetadata();
|
||||
SessionFactoryImplementor sfi = (SessionFactoryImplementor) metadata.buildSessionFactory();
|
||||
MetamodelImpl metamodel = new MetamodelImpl( sfi );
|
||||
MetamodelImpl metamodel = new MetamodelImpl( sfi, ( (MetadataImplementor) metadata ).getTypeConfiguration() );
|
||||
metamodel.initialize( (MetadataImplementor) metadata, JpaMetaModelPopulationSetting.IGNORE_UNSUPPORTED );
|
||||
sfi.close();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue