mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-16 16:15:06 +00:00
HHH-14497 - Drop legacy id-generator settings;
HHH-14718 - Drop deprecated generator implementations; HHH-14959 - Drop IdentifierGeneratorFactory as a Service
This commit is contained in:
parent
365aa58254
commit
c394261508
@ -75,8 +75,6 @@
|
||||
import org.hibernate.engine.spi.FilterDefinition;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.id.factory.spi.MutableIdentifierGeneratorFactory;
|
||||
import org.hibernate.internal.CoreLogging;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
@ -127,7 +125,6 @@ public class InFlightMetadataCollectorImpl implements InFlightMetadataCollector
|
||||
private final AttributeConverterManager attributeConverterManager = new AttributeConverterManager();
|
||||
|
||||
private final UUID uuid;
|
||||
private final MutableIdentifierGeneratorFactory identifierGeneratorFactory;
|
||||
|
||||
private final Map<String,PersistentClass> entityBindingMap = new HashMap<>();
|
||||
private final List<Component> composites = new ArrayList<>();
|
||||
@ -175,9 +172,6 @@ public InFlightMetadataCollectorImpl(
|
||||
this.uuid = UUID.randomUUID();
|
||||
this.options = options;
|
||||
|
||||
this.identifierGeneratorFactory = options.getServiceRegistry()
|
||||
.getService( MutableIdentifierGeneratorFactory.class );
|
||||
|
||||
for ( Map.Entry<String, SqmFunctionDescriptor> sqlFunctionEntry : bootstrapContext.getSqlFunctions().entrySet() ) {
|
||||
if ( sqlFunctionMap == null ) {
|
||||
// we need this to be a ConcurrentHashMap for the one we ultimately pass along to the SF
|
||||
@ -265,11 +259,6 @@ public void visitRegisteredComponents(Consumer<Component> consumer) {
|
||||
composites.forEach( consumer );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return identifierGeneratorFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionFactoryBuilder getSessionFactoryBuilder() {
|
||||
throw new UnsupportedOperationException(
|
||||
@ -2228,7 +2217,6 @@ public MetadataImpl buildMetadataInstance(MetadataBuildingContext buildingContex
|
||||
return new MetadataImpl(
|
||||
uuid,
|
||||
options,
|
||||
identifierGeneratorFactory,
|
||||
entityBindingMap,
|
||||
composites,
|
||||
mappedSuperClasses,
|
||||
@ -2293,7 +2281,7 @@ private void handleIdentifierValueBinding(
|
||||
// it could be done better
|
||||
try {
|
||||
final IdentifierGenerator ig = identifierValueBinding.createIdentifierGenerator(
|
||||
getIdentifierGeneratorFactory(),
|
||||
bootstrapContext.getIdentifierGeneratorFactory(),
|
||||
dialect,
|
||||
entityBinding
|
||||
);
|
||||
|
@ -61,6 +61,8 @@
|
||||
import org.hibernate.engine.config.spi.StandardConverters;
|
||||
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory;
|
||||
import org.hibernate.internal.CoreLogging;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.internal.log.DeprecationLogger;
|
||||
@ -522,7 +524,9 @@ public static class MetadataBuildingOptionsImpl
|
||||
implements MetadataBuildingOptions, JpaOrmXmlPersistenceUnitDefaultAware {
|
||||
private final StandardServiceRegistry serviceRegistry;
|
||||
private final MappingDefaultsImpl mappingDefaults;
|
||||
private final IdentifierGeneratorFactory identifierGeneratorFactory;
|
||||
private final TimeZoneStorageStrategy defaultTimezoneStorage;
|
||||
|
||||
// todo (6.0) : remove bootstrapContext property along with the deprecated methods
|
||||
private BootstrapContext bootstrapContext;
|
||||
|
||||
@ -549,6 +553,7 @@ public static class MetadataBuildingOptionsImpl
|
||||
|
||||
public MetadataBuildingOptionsImpl(StandardServiceRegistry serviceRegistry) {
|
||||
this.serviceRegistry = serviceRegistry;
|
||||
this.identifierGeneratorFactory = new StandardIdentifierGeneratorFactory( serviceRegistry );
|
||||
|
||||
final StrategySelector strategySelector = serviceRegistry.getService( StrategySelector.class );
|
||||
final ConfigurationService configService = serviceRegistry.getService( ConfigurationService.class );
|
||||
@ -723,6 +728,11 @@ public MappingDefaults getMappingDefaults() {
|
||||
return mappingDefaults;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return identifierGeneratorFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeZoneStorageStrategy getDefaultTimeZoneStorage() {
|
||||
return defaultTimezoneStorage;
|
||||
|
@ -27,14 +27,14 @@
|
||||
import org.hibernate.boot.model.relational.Database;
|
||||
import org.hibernate.boot.model.relational.Namespace;
|
||||
import org.hibernate.boot.model.relational.Sequence;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.boot.spi.BootstrapContext;
|
||||
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||
import org.hibernate.boot.spi.MetadataImplementor;
|
||||
import org.hibernate.boot.query.NamedHqlQueryDefinition;
|
||||
import org.hibernate.boot.query.NamedNativeQueryDefinition;
|
||||
import org.hibernate.boot.query.NamedProcedureCallDefinition;
|
||||
import org.hibernate.boot.query.NamedResultSetMappingDescriptor;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.boot.spi.BootstrapContext;
|
||||
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||
import org.hibernate.boot.spi.MetadataImplementor;
|
||||
import org.hibernate.boot.spi.SessionFactoryBuilderFactory;
|
||||
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;
|
||||
import org.hibernate.boot.spi.SessionFactoryBuilderService;
|
||||
@ -46,7 +46,6 @@
|
||||
import org.hibernate.event.service.spi.EventListenerGroup;
|
||||
import org.hibernate.event.service.spi.EventListenerRegistry;
|
||||
import org.hibernate.event.spi.EventType;
|
||||
import org.hibernate.id.factory.spi.MutableIdentifierGeneratorFactory;
|
||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||
import org.hibernate.mapping.Collection;
|
||||
import org.hibernate.mapping.Component;
|
||||
@ -78,8 +77,6 @@ public class MetadataImpl implements MetadataImplementor, Serializable {
|
||||
private final MetadataBuildingOptions metadataBuildingOptions;
|
||||
private final BootstrapContext bootstrapContext;
|
||||
|
||||
private final MutableIdentifierGeneratorFactory identifierGeneratorFactory;
|
||||
|
||||
private final Map<String,PersistentClass> entityBindingMap;
|
||||
private final List<Component> composites;
|
||||
private final Map<Class, MappedSuperclass> mappedSuperclassMap;
|
||||
@ -101,7 +98,6 @@ public class MetadataImpl implements MetadataImplementor, Serializable {
|
||||
public MetadataImpl(
|
||||
UUID uuid,
|
||||
MetadataBuildingOptions metadataBuildingOptions,
|
||||
MutableIdentifierGeneratorFactory identifierGeneratorFactory,
|
||||
Map<String, PersistentClass> entityBindingMap,
|
||||
List<Component> composites,
|
||||
Map<Class, MappedSuperclass> mappedSuperclassMap,
|
||||
@ -121,7 +117,6 @@ public MetadataImpl(
|
||||
BootstrapContext bootstrapContext) {
|
||||
this.uuid = uuid;
|
||||
this.metadataBuildingOptions = metadataBuildingOptions;
|
||||
this.identifierGeneratorFactory = identifierGeneratorFactory;
|
||||
this.entityBindingMap = entityBindingMap;
|
||||
this.composites = composites;
|
||||
this.mappedSuperclassMap = mappedSuperclassMap;
|
||||
@ -202,11 +197,6 @@ public Database getDatabase() {
|
||||
return database;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MutableIdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return identifierGeneratorFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public java.util.Collection<PersistentClass> getEntityBindings() {
|
||||
return entityBindingMap.values();
|
||||
|
@ -31,8 +31,10 @@ public class SqlStringGenerationContextImpl
|
||||
* @param configurationMap The configuration map, holding settings such as {@link AvailableSettings#DEFAULT_SCHEMA}.
|
||||
* @return An {@link SqlStringGenerationContext}.
|
||||
*/
|
||||
public static SqlStringGenerationContext fromConfigurationMap(JdbcEnvironment jdbcEnvironment,
|
||||
Database database, Map<String, Object> configurationMap) {
|
||||
public static SqlStringGenerationContext fromConfigurationMap(
|
||||
JdbcEnvironment jdbcEnvironment,
|
||||
Database database,
|
||||
Map<String, Object> configurationMap) {
|
||||
String defaultCatalog = (String) configurationMap.get( AvailableSettings.DEFAULT_CATALOG );
|
||||
String defaultSchema = (String) configurationMap.get( AvailableSettings.DEFAULT_SCHEMA );
|
||||
return fromExplicit( jdbcEnvironment, database, defaultCatalog, defaultSchema );
|
||||
@ -45,11 +47,15 @@ public static SqlStringGenerationContext fromConfigurationMap(JdbcEnvironment jd
|
||||
* @param defaultSchema The default schema to use; if {@code null}, will use the implicit schema that was configured through XML mapping.
|
||||
* @return An {@link SqlStringGenerationContext}.
|
||||
*/
|
||||
public static SqlStringGenerationContext fromExplicit(JdbcEnvironment jdbcEnvironment,
|
||||
Database database, String defaultCatalog, String defaultSchema) {
|
||||
Namespace.Name implicitNamespaceName = database.getPhysicalImplicitNamespaceName();
|
||||
IdentifierHelper identifierHelper = jdbcEnvironment.getIdentifierHelper();
|
||||
NameQualifierSupport nameQualifierSupport = jdbcEnvironment.getNameQualifierSupport();
|
||||
public static SqlStringGenerationContext fromExplicit(
|
||||
JdbcEnvironment jdbcEnvironment,
|
||||
Database database,
|
||||
String defaultCatalog,
|
||||
String defaultSchema) {
|
||||
final Namespace.Name implicitNamespaceName = database.getPhysicalImplicitNamespaceName();
|
||||
final IdentifierHelper identifierHelper = jdbcEnvironment.getIdentifierHelper();
|
||||
final NameQualifierSupport nameQualifierSupport = jdbcEnvironment.getNameQualifierSupport();
|
||||
|
||||
Identifier actualDefaultCatalog = null;
|
||||
if ( nameQualifierSupport.supportsCatalogs() ) {
|
||||
actualDefaultCatalog = identifierHelper.toIdentifier( defaultCatalog );
|
||||
@ -57,6 +63,7 @@ public static SqlStringGenerationContext fromExplicit(JdbcEnvironment jdbcEnviro
|
||||
actualDefaultCatalog = implicitNamespaceName.getCatalog();
|
||||
}
|
||||
}
|
||||
|
||||
Identifier actualDefaultSchema = null;
|
||||
if ( nameQualifierSupport.supportsSchemas() ) {
|
||||
actualDefaultSchema = identifierHelper.toIdentifier( defaultSchema );
|
||||
@ -64,6 +71,7 @@ public static SqlStringGenerationContext fromExplicit(JdbcEnvironment jdbcEnviro
|
||||
actualDefaultSchema = implicitNamespaceName.getSchema();
|
||||
}
|
||||
}
|
||||
|
||||
return new SqlStringGenerationContextImpl( jdbcEnvironment, actualDefaultCatalog, actualDefaultSchema );
|
||||
}
|
||||
|
||||
@ -85,8 +93,10 @@ public static SqlStringGenerationContext forTests(JdbcEnvironment jdbcEnvironmen
|
||||
private final Identifier defaultSchema;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private SqlStringGenerationContextImpl(JdbcEnvironment jdbcEnvironment,
|
||||
Identifier defaultCatalog, Identifier defaultSchema) {
|
||||
private SqlStringGenerationContextImpl(
|
||||
JdbcEnvironment jdbcEnvironment,
|
||||
Identifier defaultCatalog,
|
||||
Identifier defaultSchema) {
|
||||
this.dialect = jdbcEnvironment.getDialect();
|
||||
this.identifierHelper = jdbcEnvironment.getIdentifierHelper();
|
||||
this.qualifiedObjectNameFormatter = jdbcEnvironment.getQualifiedObjectNameFormatter();
|
||||
|
@ -25,7 +25,6 @@
|
||||
import org.hibernate.cfg.annotations.NamedEntityGraphDefinition;
|
||||
import org.hibernate.engine.spi.FilterDefinition;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.mapping.Component;
|
||||
import org.hibernate.mapping.FetchProfile;
|
||||
import org.hibernate.mapping.MappedSuperclass;
|
||||
@ -54,11 +53,6 @@ protected MetadataImplementor delegate() {
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return delegate.getIdentifierGeneratorFactory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getIdentifierType(String className) throws MappingException {
|
||||
return delegate.getIdentifierType( className );
|
||||
|
@ -21,6 +21,7 @@
|
||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||
import org.hibernate.cache.spi.access.AccessType;
|
||||
import org.hibernate.cfg.MetadataSourceType;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
import org.jboss.jandex.IndexView;
|
||||
|
||||
@ -53,6 +54,11 @@ public MappingDefaults getMappingDefaults() {
|
||||
return delegate.getMappingDefaults();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return delegate.getIdentifierGeneratorFactory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeZoneStorageStrategy getDefaultTimeZoneStorage() {
|
||||
return delegate.getDefaultTimeZoneStorage();
|
||||
|
@ -9,9 +9,6 @@
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import jakarta.xml.bind.JAXBContext;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
|
||||
import org.hibernate.Incubating;
|
||||
import org.hibernate.annotations.common.reflection.ReflectionManager;
|
||||
import org.hibernate.boot.CacheRegionDefinition;
|
||||
@ -22,6 +19,7 @@
|
||||
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
||||
import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject;
|
||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.jpa.spi.MutableJpaCompliance;
|
||||
import org.hibernate.metamodel.spi.ManagedTypeRepresentationResolver;
|
||||
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
|
||||
@ -50,6 +48,10 @@ public interface BootstrapContext {
|
||||
|
||||
MetadataBuildingOptions getMetadataBuildingOptions();
|
||||
|
||||
default IdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return getMetadataBuildingOptions().getIdentifierGeneratorFactory();
|
||||
}
|
||||
|
||||
boolean isJpaBootstrap();
|
||||
|
||||
/**
|
||||
|
@ -7,7 +7,9 @@
|
||||
package org.hibernate.boot.spi;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.persistence.SharedCacheMode;
|
||||
|
||||
import org.hibernate.TimeZoneStorageStrategy;
|
||||
import org.hibernate.annotations.common.reflection.ReflectionManager;
|
||||
import org.hibernate.boot.CacheRegionDefinition;
|
||||
@ -22,11 +24,14 @@
|
||||
import org.hibernate.cfg.MetadataSourceType;
|
||||
import org.hibernate.collection.internal.StandardCollectionSemanticsResolver;
|
||||
import org.hibernate.collection.spi.CollectionSemanticsResolver;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.metamodel.internal.ManagedTypeRepresentationResolverStandard;
|
||||
import org.hibernate.metamodel.spi.ManagedTypeRepresentationResolver;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
import org.jboss.jandex.IndexView;
|
||||
|
||||
import jakarta.persistence.SharedCacheMode;
|
||||
|
||||
/**
|
||||
* Describes the options used while building the Metadata object (during
|
||||
* {@link org.hibernate.boot.MetadataBuilder#build()} processing).
|
||||
@ -50,6 +55,8 @@ public interface MetadataBuildingOptions {
|
||||
*/
|
||||
MappingDefaults getMappingDefaults();
|
||||
|
||||
IdentifierGeneratorFactory getIdentifierGeneratorFactory();
|
||||
|
||||
TimeZoneStorageStrategy getDefaultTimeZoneStorage();
|
||||
|
||||
default ManagedTypeRepresentationResolver getManagedTypeRepresentationResolver() {
|
||||
@ -246,7 +253,7 @@ default CollectionSemanticsResolver getPersistentCollectionRepresentationResolve
|
||||
* Should we create constraint by default?
|
||||
*
|
||||
* @see jakarta.persistence.ConstraintMode#PROVIDER_DEFAULT
|
||||
* @see org.hibernate.cfg.AvailableSettings#DEFAULT_CONSTRAINT_MODE
|
||||
* @see org.hibernate.cfg.AvailableSettings#HBM2DDL_DEFAULT_CONSTRAINT_MODE
|
||||
*
|
||||
* @return {@code true} if not create constraint by default; {@code false} otherwise.
|
||||
*/
|
||||
|
@ -7,7 +7,6 @@
|
||||
package org.hibernate.engine.spi;
|
||||
|
||||
import org.hibernate.MappingException;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.type.Type;
|
||||
|
||||
/**
|
||||
@ -19,19 +18,14 @@
|
||||
* @see org.hibernate.internal.SessionFactoryImpl
|
||||
* @see org.hibernate.cfg.Configuration
|
||||
* @author Gavin King
|
||||
*
|
||||
* @deprecated (since 6.0) Use {@link org.hibernate.type.spi.TypeConfiguration},
|
||||
* {@link org.hibernate.boot.Metadata} or {@link org.hibernate.metamodel.RuntimeMetamodels}
|
||||
* to access such information
|
||||
*/
|
||||
@Deprecated
|
||||
public interface Mapping {
|
||||
/**
|
||||
* Allow access to the id generator factory, though this is only needed/allowed from configuration.
|
||||
*
|
||||
* @return Access to the identifier generator factory
|
||||
*
|
||||
* @deprecated temporary solution
|
||||
*/
|
||||
@Deprecated
|
||||
public IdentifierGeneratorFactory getIdentifierGeneratorFactory();
|
||||
|
||||
public Type getIdentifierType(String className) throws MappingException;
|
||||
public String getIdentifierPropertyName(String className) throws MappingException;
|
||||
public Type getReferencedPropertyType(String className, String propertyName) throws MappingException;
|
||||
Type getIdentifierType(String className) throws MappingException;
|
||||
String getIdentifierPropertyName(String className) throws MappingException;
|
||||
Type getReferencedPropertyType(String className, String propertyName) throws MappingException;
|
||||
}
|
||||
|
@ -12,11 +12,6 @@
|
||||
import java.util.Set;
|
||||
import javax.naming.NamingException;
|
||||
import javax.naming.Reference;
|
||||
import jakarta.persistence.EntityGraph;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceUnitUtil;
|
||||
import jakarta.persistence.Query;
|
||||
import jakarta.persistence.SynchronizationType;
|
||||
|
||||
import org.hibernate.CustomEntityDirtinessStrategy;
|
||||
import org.hibernate.EntityNameResolver;
|
||||
@ -40,7 +35,6 @@
|
||||
import org.hibernate.exception.spi.SQLExceptionConverter;
|
||||
import org.hibernate.graph.spi.RootGraphImplementor;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.internal.FastSessionServices;
|
||||
import org.hibernate.metadata.ClassMetadata;
|
||||
import org.hibernate.metadata.CollectionMetadata;
|
||||
@ -59,6 +53,12 @@
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
import jakarta.persistence.EntityGraph;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceUnitUtil;
|
||||
import jakarta.persistence.Query;
|
||||
import jakarta.persistence.SynchronizationType;
|
||||
|
||||
/**
|
||||
* Base delegating implementation of the SessionFactory and SessionFactoryImplementor
|
||||
* contracts for intended for easier implementation of SessionFactory.
|
||||
@ -362,11 +362,6 @@ public DeserializationResolver getDeserializationResolver() {
|
||||
return delegate.getDeserializationResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentifierGeneratorFactory getIdentifierGeneratorFactory() {
|
||||
return delegate.getIdentifierGeneratorFactory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getIdentifierType(String className) throws MappingException {
|
||||
return delegate.getIdentifierType( className );
|
||||
|
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
|
||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
*/
|
||||
package org.hibernate.id.factory;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
/**
|
||||
* Logging related to IdentifierGeneratorFactory
|
||||
*/
|
||||
public class IdGenCreationLogging {
|
||||
public static final Logger ID_GEN_LOGGER = Logger.getLogger( "org.hibernate.orm.idgen.factory" );
|
||||
|
||||
public static final boolean IS_TRACE_ENABLE = ID_GEN_LOGGER.isTraceEnabled();
|
||||
public static final boolean IS_DEBUG_ENABLE = ID_GEN_LOGGER.isDebugEnabled();
|
||||
}
|
@ -5,9 +5,9 @@
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.id.factory;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
import org.hibernate.type.Type;
|
||||
@ -25,17 +25,6 @@ public interface IdentifierGeneratorFactory {
|
||||
*/
|
||||
Dialect getDialect();
|
||||
|
||||
/**
|
||||
* Allow injection of the dialect to use.
|
||||
*
|
||||
* @param dialect The dialect
|
||||
*
|
||||
* @deprecated The intention is that Dialect should be required to be specified up-front and it would then get
|
||||
* ctor injected.
|
||||
*/
|
||||
@Deprecated
|
||||
void setDialect(Dialect dialect);
|
||||
|
||||
/**
|
||||
* Given a strategy, retrieve the appropriate identifier generator instance.
|
||||
*
|
||||
|
@ -1,177 +0,0 @@
|
||||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.id.factory.internal;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.hibernate.MappingException;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||
import org.hibernate.id.Assigned;
|
||||
import org.hibernate.id.ForeignGenerator;
|
||||
import org.hibernate.id.GUIDGenerator;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
import org.hibernate.id.IdentityGenerator;
|
||||
import org.hibernate.id.IncrementGenerator;
|
||||
import org.hibernate.id.SelectGenerator;
|
||||
import org.hibernate.id.UUIDGenerator;
|
||||
import org.hibernate.id.UUIDHexGenerator;
|
||||
import org.hibernate.id.enhanced.SequenceStyleGenerator;
|
||||
import org.hibernate.id.enhanced.TableGenerator;
|
||||
import org.hibernate.id.factory.spi.MutableIdentifierGeneratorFactory;
|
||||
import org.hibernate.internal.CoreLogging;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.resource.beans.container.spi.BeanContainer;
|
||||
import org.hibernate.resource.beans.container.spi.ContainedBean;
|
||||
import org.hibernate.resource.beans.internal.FallbackBeanInstanceProducer;
|
||||
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
import org.hibernate.service.spi.ServiceRegistryAwareService;
|
||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||
import org.hibernate.type.Type;
|
||||
|
||||
/**
|
||||
* Basic <tt>templated</tt> support for {@link org.hibernate.id.factory.IdentifierGeneratorFactory} implementations.
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@SuppressWarnings( { "deprecation" ,"rawtypes" ,"serial" } )
|
||||
public class DefaultIdentifierGeneratorFactory
|
||||
implements MutableIdentifierGeneratorFactory, Serializable, ServiceRegistryAwareService, BeanContainer.LifecycleOptions {
|
||||
|
||||
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( DefaultIdentifierGeneratorFactory.class );
|
||||
|
||||
private final boolean ignoreBeanContainer;
|
||||
|
||||
private ServiceRegistry serviceRegistry;
|
||||
private Dialect dialect;
|
||||
|
||||
private final ConcurrentHashMap<String, Class> generatorStrategyToClassNameMap = new ConcurrentHashMap<>();
|
||||
|
||||
private BeanContainer beanContainer;
|
||||
|
||||
/**
|
||||
* Constructs a new DefaultIdentifierGeneratorFactory.
|
||||
*/
|
||||
public DefaultIdentifierGeneratorFactory() {
|
||||
this( false );
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows to explicitly control if the BeanContainer should be ignored
|
||||
* (if there is one registered) when initializing any new IdentifierGenerator
|
||||
* instances.
|
||||
* @param ignoreBeanContainer
|
||||
*/
|
||||
public DefaultIdentifierGeneratorFactory(boolean ignoreBeanContainer) {
|
||||
this.ignoreBeanContainer = ignoreBeanContainer;
|
||||
register( "uuid", UUIDHexGenerator.class );
|
||||
register( "uuid2", UUIDGenerator.class );
|
||||
register( "uuid.hex", UUIDHexGenerator.class );
|
||||
// could be done with UUIDGenerator + strategy
|
||||
register( "guid", GUIDGenerator.class );
|
||||
|
||||
register( "assigned", Assigned.class );
|
||||
register( "identity", IdentityGenerator.class );
|
||||
register( "select", SelectGenerator.class );
|
||||
register( "sequence", SequenceStyleGenerator.class );
|
||||
register( "increment", IncrementGenerator.class );
|
||||
register( "foreign", ForeignGenerator.class );
|
||||
register( "enhanced-sequence", SequenceStyleGenerator.class );
|
||||
register( "enhanced-table", TableGenerator.class );
|
||||
}
|
||||
|
||||
public void register(String strategy, Class generatorClass) {
|
||||
LOG.debugf( "Registering IdentifierGenerator strategy [%s] -> [%s]", strategy, generatorClass.getName() );
|
||||
final Class previous = generatorStrategyToClassNameMap.put( strategy, generatorClass );
|
||||
if ( previous != null && LOG.isDebugEnabled() ) {
|
||||
LOG.debugf( " - overriding [%s]", previous.getName() );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialect getDialect() {
|
||||
return dialect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDialect(Dialect dialect) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public IdentifierGenerator createIdentifierGenerator(String strategy, Type type, Properties config) {
|
||||
try {
|
||||
Class clazz = getIdentifierGeneratorClass( strategy );
|
||||
IdentifierGenerator identifierGenerator;
|
||||
if ( beanContainer == null || generatorStrategyToClassNameMap.containsKey( strategy ) ) {
|
||||
identifierGenerator = ( IdentifierGenerator ) clazz.newInstance();
|
||||
}
|
||||
else {
|
||||
final ContainedBean<IdentifierGenerator> generatorBean = beanContainer.getBean(
|
||||
clazz,
|
||||
this,
|
||||
FallbackBeanInstanceProducer.INSTANCE
|
||||
);
|
||||
identifierGenerator = generatorBean.getBeanInstance();
|
||||
}
|
||||
identifierGenerator.configure( type, config, serviceRegistry );
|
||||
return identifierGenerator;
|
||||
}
|
||||
catch ( Exception e ) {
|
||||
final String entityName = config.getProperty( IdentifierGenerator.ENTITY_NAME );
|
||||
throw new MappingException( String.format( "Could not instantiate id generator [entity-name=%s]", entityName ), e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseCachedReferences() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useJpaCompliantCreation() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class getIdentifierGeneratorClass(String strategy) {
|
||||
if ( "hilo".equals( strategy ) ) {
|
||||
throw new UnsupportedOperationException( "Support for 'hilo' generator has been removed" );
|
||||
}
|
||||
String resolvedStrategy = "native".equals( strategy ) ?
|
||||
getDialect().getNativeIdentifierGeneratorStrategy() : strategy;
|
||||
|
||||
Class generatorClass = generatorStrategyToClassNameMap.get( resolvedStrategy );
|
||||
try {
|
||||
if ( generatorClass == null ) {
|
||||
final ClassLoaderService cls = serviceRegistry.getService( ClassLoaderService.class );
|
||||
generatorClass = cls.classForName( resolvedStrategy );
|
||||
}
|
||||
}
|
||||
catch ( ClassLoadingException e ) {
|
||||
throw new MappingException( String.format( "Could not interpret id generator strategy [%s]", strategy ) );
|
||||
}
|
||||
return generatorClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectServices(ServiceRegistryImplementor serviceRegistry) {
|
||||
this.serviceRegistry = serviceRegistry;
|
||||
this.dialect = serviceRegistry.getService( JdbcEnvironment.class ).getDialect();
|
||||
final ConfigurationService configService = serviceRegistry.getService( ConfigurationService.class );
|
||||
if ( ! this.ignoreBeanContainer ) {
|
||||
this.beanContainer = serviceRegistry.getService( ManagedBeanRegistry.class ).getBeanContainer();
|
||||
//else we just have beanContainer = null;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.id.factory.internal;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.boot.registry.StandardServiceInitiator;
|
||||
import org.hibernate.id.factory.spi.MutableIdentifierGeneratorFactory;
|
||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:emmanuel@hibernate.org">Emmanuel Bernard</a>
|
||||
*/
|
||||
public class MutableIdentifierGeneratorFactoryInitiator implements StandardServiceInitiator<MutableIdentifierGeneratorFactory> {
|
||||
public static final MutableIdentifierGeneratorFactoryInitiator INSTANCE = new MutableIdentifierGeneratorFactoryInitiator();
|
||||
|
||||
@Override
|
||||
public Class<MutableIdentifierGeneratorFactory> getServiceInitiated() {
|
||||
return MutableIdentifierGeneratorFactory.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MutableIdentifierGeneratorFactory initiateService(Map configurationValues, ServiceRegistryImplementor registry) {
|
||||
return new DefaultIdentifierGeneratorFactory();
|
||||
}
|
||||
}
|
@ -0,0 +1,203 @@
|
||||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.id.factory.internal;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.hibernate.MappingException;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
|
||||
import org.hibernate.boot.registry.selector.spi.StrategySelector;
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||
import org.hibernate.engine.config.spi.StandardConverters;
|
||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||
import org.hibernate.id.Assigned;
|
||||
import org.hibernate.id.ForeignGenerator;
|
||||
import org.hibernate.id.GUIDGenerator;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
import org.hibernate.id.IdentityGenerator;
|
||||
import org.hibernate.id.IncrementGenerator;
|
||||
import org.hibernate.id.SelectGenerator;
|
||||
import org.hibernate.id.UUIDGenerator;
|
||||
import org.hibernate.id.UUIDHexGenerator;
|
||||
import org.hibernate.id.enhanced.SequenceStyleGenerator;
|
||||
import org.hibernate.id.enhanced.TableGenerator;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.jpa.spi.IdentifierGeneratorStrategyProvider;
|
||||
import org.hibernate.resource.beans.container.spi.BeanContainer;
|
||||
import org.hibernate.resource.beans.container.spi.ContainedBean;
|
||||
import org.hibernate.resource.beans.container.spi.ExtendedBeanManager;
|
||||
import org.hibernate.resource.beans.internal.FallbackBeanInstanceProducer;
|
||||
import org.hibernate.resource.beans.spi.ManagedBeanRegistry;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
import org.hibernate.type.Type;
|
||||
|
||||
import static org.hibernate.id.factory.IdGenCreationLogging.ID_GEN_LOGGER;
|
||||
|
||||
/**
|
||||
* Basic <tt>templated</tt> support for {@link org.hibernate.id.factory.IdentifierGeneratorFactory} implementations.
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@SuppressWarnings( { "deprecation" ,"rawtypes" } )
|
||||
public class StandardIdentifierGeneratorFactory
|
||||
implements IdentifierGeneratorFactory, BeanContainer.LifecycleOptions, Serializable {
|
||||
|
||||
private final ConcurrentHashMap<String, Class<? extends IdentifierGenerator>> legacyGeneratorClassNameMap = new ConcurrentHashMap<>();
|
||||
|
||||
private final ServiceRegistry serviceRegistry;
|
||||
private final BeanContainer beanContainer;
|
||||
|
||||
private Dialect dialect;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new factory
|
||||
*/
|
||||
public StandardIdentifierGeneratorFactory(ServiceRegistry serviceRegistry) {
|
||||
this( serviceRegistry, shouldIgnoreBeanContainer( serviceRegistry ) );
|
||||
}
|
||||
|
||||
private static boolean shouldIgnoreBeanContainer(ServiceRegistry serviceRegistry) {
|
||||
final ConfigurationService configService = serviceRegistry.getService( ConfigurationService.class );
|
||||
final Object beanManagerRef = configService.getSettings().get( AvailableSettings.JAKARTA_CDI_BEAN_MANAGER );
|
||||
|
||||
if ( beanManagerRef instanceof ExtendedBeanManager ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( configService.getSetting( AvailableSettings.DELAY_CDI_ACCESS, StandardConverters.BOOLEAN, false ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new factory, explicitly controlling whether to use
|
||||
* CDI or not
|
||||
*/
|
||||
public StandardIdentifierGeneratorFactory(ServiceRegistry serviceRegistry, boolean ignoreBeanContainer) {
|
||||
this.serviceRegistry = serviceRegistry;
|
||||
|
||||
if ( ignoreBeanContainer ) {
|
||||
ID_GEN_LOGGER.debug( "Ignoring CDI for resolving IdentifierGenerator instances as extended or delayed CDI support was enabled" );
|
||||
this.beanContainer = null;
|
||||
}
|
||||
else {
|
||||
this.beanContainer = serviceRegistry.getService( ManagedBeanRegistry.class ).getBeanContainer();
|
||||
if ( beanContainer == null ) {
|
||||
ID_GEN_LOGGER.debug( "Resolving IdentifierGenerator instances will not use CDI as it was not configured" );
|
||||
}
|
||||
}
|
||||
|
||||
register( "uuid2", UUIDGenerator.class );
|
||||
register( "guid", GUIDGenerator.class ); // can be done with UUIDGenerator + strategy
|
||||
register( "uuid", UUIDHexGenerator.class ); // "deprecated" for new use
|
||||
register( "uuid.hex", UUIDHexGenerator.class ); // uuid.hex is deprecated
|
||||
register( "assigned", Assigned.class );
|
||||
register( "identity", IdentityGenerator.class );
|
||||
register( "select", SelectGenerator.class );
|
||||
register( "sequence", SequenceStyleGenerator.class );
|
||||
register( "increment", IncrementGenerator.class );
|
||||
register( "foreign", ForeignGenerator.class );
|
||||
register( "enhanced-sequence", SequenceStyleGenerator.class );
|
||||
register( "enhanced-table", TableGenerator.class );
|
||||
|
||||
final ConfigurationService configService = serviceRegistry.getService( ConfigurationService.class );
|
||||
final Object providerSetting = configService.getSettings().get( AvailableSettings.IDENTIFIER_GENERATOR_STRATEGY_PROVIDER );
|
||||
if ( providerSetting != null ) {
|
||||
final IdentifierGeneratorStrategyProvider idGeneratorStrategyProvider = serviceRegistry.getService( StrategySelector.class ).resolveStrategy(
|
||||
IdentifierGeneratorStrategyProvider.class,
|
||||
providerSetting
|
||||
);
|
||||
for ( Map.Entry<String,Class<?>> entry : idGeneratorStrategyProvider.getStrategies().entrySet() ) {
|
||||
register( entry.getKey(), (Class) entry.getValue() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void register(String strategy, Class<? extends IdentifierGenerator> generatorClass) {
|
||||
ID_GEN_LOGGER.debugf( "Registering IdentifierGenerator strategy [%s] -> [%s]", strategy, generatorClass.getName() );
|
||||
final Class previous = legacyGeneratorClassNameMap.put( strategy, generatorClass );
|
||||
if ( previous != null && ID_GEN_LOGGER.isDebugEnabled() ) {
|
||||
ID_GEN_LOGGER.debugf( " - overriding [%s]", previous.getName() );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialect getDialect() {
|
||||
if ( dialect == null ) {
|
||||
dialect = serviceRegistry.getService( JdbcEnvironment.class ).getDialect();
|
||||
}
|
||||
return dialect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdentifierGenerator createIdentifierGenerator(String strategy, Type type, Properties config) {
|
||||
try {
|
||||
final Class<? extends IdentifierGenerator> clazz = getIdentifierGeneratorClass( strategy );
|
||||
final IdentifierGenerator identifierGenerator;
|
||||
|
||||
if ( beanContainer == null || legacyGeneratorClassNameMap.containsKey( strategy ) ) {
|
||||
identifierGenerator = clazz.newInstance();
|
||||
}
|
||||
else {
|
||||
final ContainedBean<? extends IdentifierGenerator> generatorBean = beanContainer.getBean(
|
||||
clazz,
|
||||
this,
|
||||
FallbackBeanInstanceProducer.INSTANCE
|
||||
);
|
||||
identifierGenerator = generatorBean.getBeanInstance();
|
||||
}
|
||||
|
||||
identifierGenerator.configure( type, config, serviceRegistry );
|
||||
return identifierGenerator;
|
||||
}
|
||||
catch ( Exception e ) {
|
||||
final String entityName = config.getProperty( IdentifierGenerator.ENTITY_NAME );
|
||||
throw new MappingException( String.format( "Could not instantiate id generator [entity-name=%s]", entityName ), e );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseCachedReferences() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useJpaCompliantCreation() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends IdentifierGenerator> getIdentifierGeneratorClass(String strategy) {
|
||||
if ( "hilo".equals( strategy ) ) {
|
||||
throw new UnsupportedOperationException( "Support for 'hilo' generator has been removed" );
|
||||
}
|
||||
String resolvedStrategy = "native".equals( strategy )
|
||||
? getDialect().getNativeIdentifierGeneratorStrategy()
|
||||
: strategy;
|
||||
|
||||
Class generatorClass = legacyGeneratorClassNameMap.get( resolvedStrategy );
|
||||
try {
|
||||
if ( generatorClass == null ) {
|
||||
final ClassLoaderService cls = serviceRegistry.getService( ClassLoaderService.class );
|
||||
generatorClass = cls.classForName( resolvedStrategy );
|
||||
}
|
||||
}
|
||||
catch ( ClassLoadingException e ) {
|
||||
throw new MappingException( String.format( "Could not interpret id generator strategy [%s]", strategy ) );
|
||||
}
|
||||
return generatorClass;
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.id.factory.spi;
|
||||
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.service.Service;
|
||||
|
||||
/**
|
||||
* Let people register strategies
|
||||
*
|
||||
* @author <a href="mailto:emmanuel@hibernate.org">Emmanuel Bernard</a>
|
||||
*/
|
||||
public interface MutableIdentifierGeneratorFactory extends IdentifierGeneratorFactory, Service {
|
||||
public void register(String strategy, Class generatorClass);
|
||||
}
|
@ -297,8 +297,8 @@ public void sessionFactoryClosed(SessionFactory factory) {
|
||||
//Generators:
|
||||
this.identifierGenerators = new HashMap<>();
|
||||
bootMetamodel.getEntityBindings().stream().filter( model -> !model.isInherited() ).forEach( model -> {
|
||||
IdentifierGenerator generator = model.getIdentifier().createIdentifierGenerator(
|
||||
bootMetamodel.getIdentifierGeneratorFactory(),
|
||||
final IdentifierGenerator generator = model.getIdentifier().createIdentifierGenerator(
|
||||
bootstrapContext.getIdentifierGeneratorFactory(),
|
||||
jdbcServices.getJdbcEnvironment().getDialect(),
|
||||
(RootClass) model
|
||||
);
|
||||
|
@ -55,7 +55,6 @@
|
||||
import org.hibernate.cfg.beanvalidation.BeanValidationIntegrator;
|
||||
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.id.factory.spi.MutableIdentifierGeneratorFactory;
|
||||
import org.hibernate.integrator.spi.Integrator;
|
||||
import org.hibernate.internal.EntityManagerMessageLogger;
|
||||
import org.hibernate.internal.util.NullnessHelper;
|
||||
@ -68,7 +67,6 @@
|
||||
import org.hibernate.jpa.boot.spi.TypeContributorList;
|
||||
import org.hibernate.jpa.internal.util.LogHelper;
|
||||
import org.hibernate.jpa.internal.util.PersistenceUnitTransactionTypeHelper;
|
||||
import org.hibernate.jpa.spi.IdentifierGeneratorStrategyProvider;
|
||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||
import org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorBuilderImpl;
|
||||
import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl;
|
||||
@ -261,11 +259,8 @@ private EntityManagerFactoryBuilderImpl(
|
||||
|
||||
this.standardServiceRegistry = ssrBuilder.build();
|
||||
|
||||
configureIdentifierGenerators( standardServiceRegistry );
|
||||
|
||||
final MetadataSources metadataSources = new MetadataSources( bsr );
|
||||
this.metamodelBuilder = (MetadataBuilderImplementor) metadataSources.getMetadataBuilder(
|
||||
standardServiceRegistry );
|
||||
this.metamodelBuilder = (MetadataBuilderImplementor) metadataSources.getMetadataBuilder( standardServiceRegistry );
|
||||
List<ConverterDescriptor> attributeConverterDefinitions = applyMappingResources( metadataSources );
|
||||
|
||||
applyMetamodelBuilderSettings( mergedSettings, attributeConverterDefinitions );
|
||||
@ -1213,29 +1208,6 @@ private CacheRegionDefinition parseCacheRegionDefinitionEntry(String role, Strin
|
||||
return new CacheRegionDefinition( cacheType, role, usage, region, lazyProperty );
|
||||
}
|
||||
|
||||
private void configureIdentifierGenerators(StandardServiceRegistry ssr) {
|
||||
final StrategySelector strategySelector = ssr.getService( StrategySelector.class );
|
||||
|
||||
// apply id generators
|
||||
final Object idGeneratorStrategyProviderSetting = configurationValues.remove( AvailableSettings.IDENTIFIER_GENERATOR_STRATEGY_PROVIDER );
|
||||
if ( idGeneratorStrategyProviderSetting != null ) {
|
||||
final IdentifierGeneratorStrategyProvider idGeneratorStrategyProvider = strategySelector.resolveStrategy(
|
||||
IdentifierGeneratorStrategyProvider.class,
|
||||
idGeneratorStrategyProviderSetting
|
||||
);
|
||||
final MutableIdentifierGeneratorFactory identifierGeneratorFactory = ssr.getService( MutableIdentifierGeneratorFactory.class );
|
||||
if ( identifierGeneratorFactory == null ) {
|
||||
throw persistenceException(
|
||||
"Application requested custom identifier generator strategies, " +
|
||||
"but the MutableIdentifierGeneratorFactory could not be found"
|
||||
);
|
||||
}
|
||||
for ( Map.Entry<String,Class<?>> entry : idGeneratorStrategyProvider.getStrategies().entrySet() ) {
|
||||
identifierGeneratorFactory.register( entry.getKey(), entry.getValue() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<ConverterDescriptor> applyMappingResources(MetadataSources metadataSources) {
|
||||
// todo : where in the heck are `org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor.getManagedClassNames` handled?!?
|
||||
|
@ -389,7 +389,6 @@ public IdentifierGenerator createIdentifierGenerator(
|
||||
);
|
||||
}
|
||||
|
||||
identifierGeneratorFactory.setDialect( dialect );
|
||||
identifierGenerator = identifierGeneratorFactory.createIdentifierGenerator(
|
||||
identifierGeneratorStrategy,
|
||||
getType(),
|
||||
@ -429,7 +428,6 @@ public String getIdentifierGeneratorStrategy() {
|
||||
}
|
||||
|
||||
public boolean isIdentityColumn(IdentifierGeneratorFactory identifierGeneratorFactory, Dialect dialect) {
|
||||
identifierGeneratorFactory.setDialect( dialect );
|
||||
return IdentityGenerator.class.isAssignableFrom(identifierGeneratorFactory.getIdentifierGeneratorClass( identifierGeneratorStrategy ));
|
||||
}
|
||||
|
||||
|
@ -486,100 +486,104 @@ public boolean hasPrimaryKey() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlCreateString(Mapping p, SqlStringGenerationContext context, String defaultCatalog,
|
||||
public String sqlCreateString(
|
||||
Mapping p,
|
||||
SqlStringGenerationContext context,
|
||||
String defaultCatalog,
|
||||
String defaultSchema) {
|
||||
Dialect dialect = context.getDialect();
|
||||
StringBuilder buf = new StringBuilder( hasPrimaryKey() ? dialect.getCreateTableString() : dialect.getCreateMultisetTableString() )
|
||||
.append( ' ' )
|
||||
.append( getQualifiedName( context ) )
|
||||
.append( " (" );
|
||||
|
||||
boolean identityColumn = idValue != null && idValue.isIdentityColumn( p.getIdentifierGeneratorFactory(), dialect );
|
||||
|
||||
// Try to find out the name of the primary key to create it as identity if the IdentityGenerator is used
|
||||
String pkname = null;
|
||||
if ( hasPrimaryKey() && identityColumn ) {
|
||||
pkname = getPrimaryKey().getColumnIterator().next().getQuotedName( dialect );
|
||||
}
|
||||
|
||||
Iterator<Column> iter = getColumnIterator();
|
||||
while ( iter.hasNext() ) {
|
||||
Column col = (Column) iter.next();
|
||||
|
||||
buf.append( col.getQuotedName( dialect ) )
|
||||
.append( ' ' );
|
||||
|
||||
if ( identityColumn && col.getQuotedName( dialect ).equals( pkname ) ) {
|
||||
// to support dialects that have their own identity data type
|
||||
if ( dialect.getIdentityColumnSupport().hasDataTypeInIdentityColumn() ) {
|
||||
buf.append( col.getSqlType( dialect, p ) );
|
||||
}
|
||||
buf.append( ' ' )
|
||||
.append( dialect.getIdentityColumnSupport().getIdentityColumnString( col.getSqlTypeCode( p ) ) );
|
||||
}
|
||||
else {
|
||||
final String columnType = col.getSqlType( dialect, p );
|
||||
buf.append( columnType );
|
||||
|
||||
String defaultValue = col.getDefaultValue();
|
||||
if ( defaultValue != null ) {
|
||||
buf.append( " default " ).append( defaultValue );
|
||||
}
|
||||
|
||||
if ( col.isNullable() ) {
|
||||
buf.append( dialect.getNullColumnString( columnType ) );
|
||||
}
|
||||
else {
|
||||
buf.append( " not null" );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ( col.isUnique() ) {
|
||||
String keyName = Constraint.generateName( "UK_", this, col );
|
||||
UniqueKey uk = getOrCreateUniqueKey( keyName );
|
||||
uk.addColumn( col );
|
||||
buf.append( dialect.getUniqueDelegate()
|
||||
.getColumnDefinitionUniquenessFragment( col, context ) );
|
||||
}
|
||||
|
||||
String checkConstraint = col.checkConstraint();
|
||||
if ( checkConstraint!=null && dialect.supportsColumnCheck() ) {
|
||||
buf.append( checkConstraint );
|
||||
}
|
||||
|
||||
String columnComment = col.getComment();
|
||||
if ( columnComment != null ) {
|
||||
buf.append( dialect.getColumnComment( columnComment ) );
|
||||
}
|
||||
|
||||
if ( iter.hasNext() ) {
|
||||
buf.append( ", " );
|
||||
}
|
||||
|
||||
}
|
||||
if ( hasPrimaryKey() ) {
|
||||
buf.append( ", " )
|
||||
.append( getPrimaryKey().sqlConstraintString( dialect ) );
|
||||
}
|
||||
|
||||
buf.append( dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment( this, context ) );
|
||||
|
||||
if ( dialect.supportsTableCheck() ) {
|
||||
for ( String checkConstraint : checkConstraints ) {
|
||||
buf.append( ", check (" )
|
||||
.append( checkConstraint )
|
||||
.append( ')' );
|
||||
}
|
||||
}
|
||||
|
||||
buf.append( ')' );
|
||||
|
||||
if ( comment != null ) {
|
||||
buf.append( dialect.getTableComment( comment ) );
|
||||
}
|
||||
|
||||
return buf.append( dialect.getTableTypeString() ).toString();
|
||||
throw new UnsupportedOperationException();
|
||||
// Dialect dialect = context.getDialect();
|
||||
// StringBuilder buf = new StringBuilder( hasPrimaryKey() ? dialect.getCreateTableString() : dialect.getCreateMultisetTableString() )
|
||||
// .append( ' ' )
|
||||
// .append( getQualifiedName( context ) )
|
||||
// .append( " (" );
|
||||
//
|
||||
// boolean identityColumn = idValue != null && idValue.isIdentityColumn( p.getIdentifierGeneratorFactory(), dialect );
|
||||
//
|
||||
// // Try to find out the name of the primary key to create it as identity if the IdentityGenerator is used
|
||||
// String pkname = null;
|
||||
// if ( hasPrimaryKey() && identityColumn ) {
|
||||
// pkname = getPrimaryKey().getColumnIterator().next().getQuotedName( dialect );
|
||||
// }
|
||||
//
|
||||
// Iterator<Column> iter = getColumnIterator();
|
||||
// while ( iter.hasNext() ) {
|
||||
// Column col = (Column) iter.next();
|
||||
//
|
||||
// buf.append( col.getQuotedName( dialect ) )
|
||||
// .append( ' ' );
|
||||
//
|
||||
// if ( identityColumn && col.getQuotedName( dialect ).equals( pkname ) ) {
|
||||
// // to support dialects that have their own identity data type
|
||||
// if ( dialect.getIdentityColumnSupport().hasDataTypeInIdentityColumn() ) {
|
||||
// buf.append( col.getSqlType( dialect, p ) );
|
||||
// }
|
||||
// buf.append( ' ' )
|
||||
// .append( dialect.getIdentityColumnSupport().getIdentityColumnString( col.getSqlTypeCode( p ) ) );
|
||||
// }
|
||||
// else {
|
||||
// final String columnType = col.getSqlType( dialect, p );
|
||||
// buf.append( columnType );
|
||||
//
|
||||
// String defaultValue = col.getDefaultValue();
|
||||
// if ( defaultValue != null ) {
|
||||
// buf.append( " default " ).append( defaultValue );
|
||||
// }
|
||||
//
|
||||
// if ( col.isNullable() ) {
|
||||
// buf.append( dialect.getNullColumnString( columnType ) );
|
||||
// }
|
||||
// else {
|
||||
// buf.append( " not null" );
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// if ( col.isUnique() ) {
|
||||
// String keyName = Constraint.generateName( "UK_", this, col );
|
||||
// UniqueKey uk = getOrCreateUniqueKey( keyName );
|
||||
// uk.addColumn( col );
|
||||
// buf.append( dialect.getUniqueDelegate()
|
||||
// .getColumnDefinitionUniquenessFragment( col, context ) );
|
||||
// }
|
||||
//
|
||||
// String checkConstraint = col.checkConstraint();
|
||||
// if ( checkConstraint!=null && dialect.supportsColumnCheck() ) {
|
||||
// buf.append( checkConstraint );
|
||||
// }
|
||||
//
|
||||
// String columnComment = col.getComment();
|
||||
// if ( columnComment != null ) {
|
||||
// buf.append( dialect.getColumnComment( columnComment ) );
|
||||
// }
|
||||
//
|
||||
// if ( iter.hasNext() ) {
|
||||
// buf.append( ", " );
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// if ( hasPrimaryKey() ) {
|
||||
// buf.append( ", " )
|
||||
// .append( getPrimaryKey().sqlConstraintString( dialect ) );
|
||||
// }
|
||||
//
|
||||
// buf.append( dialect.getUniqueDelegate().getTableCreationUniqueConstraintsFragment( this, context ) );
|
||||
//
|
||||
// if ( dialect.supportsTableCheck() ) {
|
||||
// for ( String checkConstraint : checkConstraints ) {
|
||||
// buf.append( ", check (" )
|
||||
// .append( checkConstraint )
|
||||
// .append( ')' );
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// buf.append( ')' );
|
||||
//
|
||||
// if ( comment != null ) {
|
||||
// buf.append( dialect.getTableComment( comment ) );
|
||||
// }
|
||||
//
|
||||
// return buf.append( dialect.getTableTypeString() ).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -513,10 +513,10 @@ else if ( indexedCollection instanceof org.hibernate.mapping.Map
|
||||
identifierColumnAlias = col.getAlias( dialect );
|
||||
// unquotedIdentifierColumnName = identifierColumnAlias;
|
||||
identifierGenerator = idColl.getIdentifier().createIdentifierGenerator(
|
||||
creationContext.getMetadata().getIdentifierGeneratorFactory(),
|
||||
persisterCreationContext.getBootstrapContext().getIdentifierGeneratorFactory(),
|
||||
factory.getDialect(),
|
||||
null
|
||||
);
|
||||
);
|
||||
identifierGenerator.initialize( creationContext.getSessionFactory().getSqlStringGenerationContext() );
|
||||
}
|
||||
else {
|
||||
|
@ -29,7 +29,6 @@
|
||||
import org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator;
|
||||
import org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformResolverInitiator;
|
||||
import org.hibernate.event.internal.EntityCopyObserverFactoryInitiator;
|
||||
import org.hibernate.id.factory.internal.MutableIdentifierGeneratorFactoryInitiator;
|
||||
import org.hibernate.persister.internal.PersisterClassResolverInitiator;
|
||||
import org.hibernate.persister.internal.PersisterFactoryInitiator;
|
||||
import org.hibernate.property.access.internal.PropertyAccessStrategyResolverInitiator;
|
||||
@ -79,8 +78,6 @@ private static List<StandardServiceInitiator> buildStandardServiceInitiatorList(
|
||||
serviceInitiators.add( JdbcServicesInitiator.INSTANCE );
|
||||
serviceInitiators.add( RefCursorSupportInitiator.INSTANCE );
|
||||
|
||||
serviceInitiators.add( MutableIdentifierGeneratorFactoryInitiator.INSTANCE);
|
||||
|
||||
serviceInitiators.add( JtaPlatformResolverInitiator.INSTANCE );
|
||||
serviceInitiators.add( JtaPlatformInitiator.INSTANCE );
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
import org.hibernate.boot.model.relational.QualifiedName;
|
||||
import org.hibernate.boot.model.relational.QualifiedNameParser;
|
||||
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
|
||||
import org.hibernate.boot.spi.MetadataImplementor;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.mapping.Column;
|
||||
import org.hibernate.mapping.Constraint;
|
||||
@ -36,7 +37,9 @@ public StandardTableExporter(Dialect dialect) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSqlCreateStrings(Table table, Metadata metadata,
|
||||
public String[] getSqlCreateStrings(
|
||||
Table table,
|
||||
Metadata metadata,
|
||||
SqlStringGenerationContext context) {
|
||||
final QualifiedName tableName = new QualifiedNameParser.NameParts(
|
||||
Identifier.toIdentifier( table.getCatalog(), table.isCatalogQuoted() ),
|
||||
@ -54,7 +57,7 @@ public String[] getSqlCreateStrings(Table table, Metadata metadata,
|
||||
|
||||
boolean isPrimaryKeyIdentity = table.hasPrimaryKey()
|
||||
&& table.getIdentifierValue() != null
|
||||
&& table.getIdentifierValue().isIdentityColumn( metadata.getIdentifierGeneratorFactory(), dialect );
|
||||
&& table.getIdentifierValue().isIdentityColumn( ( (MetadataImplementor) metadata ).getMetadataBuildingOptions().getIdentifierGeneratorFactory(), dialect );
|
||||
// this is the much better form moving forward as we move to metamodel
|
||||
//boolean isPrimaryKeyIdentity = hasPrimaryKey
|
||||
// && table.getPrimaryKey().getColumnSpan() == 1
|
||||
|
@ -46,13 +46,13 @@ public void testGeneratedUuidId() throws Exception {
|
||||
.applySetting( AvailableSettings.HBM2DDL_AUTO, "create-drop" )
|
||||
.build();
|
||||
try {
|
||||
Metadata metadata = new MetadataSources( ssr ).addAnnotatedClass( TheEntity.class ).buildMetadata();
|
||||
( (MetadataImpl) metadata ).validate();
|
||||
MetadataImpl metadata = (MetadataImpl) new MetadataSources( ssr ).addAnnotatedClass( TheEntity.class ).buildMetadata();
|
||||
metadata.validate();
|
||||
|
||||
PersistentClass entityBinding = metadata.getEntityBinding( TheEntity.class.getName() );
|
||||
assertEquals( UUID.class, entityBinding.getIdentifier().getType().getReturnedClass() );
|
||||
IdentifierGenerator generator = entityBinding.getIdentifier().createIdentifierGenerator(
|
||||
metadata.getIdentifierGeneratorFactory(),
|
||||
metadata.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
metadata.getDatabase().getDialect(),
|
||||
null,
|
||||
null,
|
||||
|
@ -22,12 +22,12 @@
|
||||
import org.hibernate.id.UUIDGenerator;
|
||||
import org.hibernate.id.enhanced.DatabaseStructure;
|
||||
import org.hibernate.id.enhanced.SequenceStyleGenerator;
|
||||
import org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory;
|
||||
import org.hibernate.mapping.IdentifierBag;
|
||||
import org.hibernate.mapping.KeyValue;
|
||||
import org.hibernate.mapping.PersistentClass;
|
||||
import org.hibernate.mapping.Property;
|
||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||
|
||||
import org.hibernate.testing.orm.junit.FailureExpectedExtension;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -61,8 +61,7 @@ public void testAutoDefaults() {
|
||||
.addAnnotatedClass( Entity2.class )
|
||||
.buildMetadata();
|
||||
|
||||
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
|
||||
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
|
||||
final IdentifierGeneratorFactory generatorFactory = new StandardIdentifierGeneratorFactory( ssr );
|
||||
|
||||
final PersistentClass entityBinding = metadata.getEntityBinding( Entity1.class.getName() );
|
||||
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
|
||||
@ -91,8 +90,7 @@ public void testAutoGeneratedValueGenerator() {
|
||||
.addAnnotatedClass( Entity2.class )
|
||||
.buildMetadata();
|
||||
|
||||
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
|
||||
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
|
||||
final IdentifierGeneratorFactory generatorFactory = new StandardIdentifierGeneratorFactory( ssr );
|
||||
|
||||
final PersistentClass entityBinding = metadata.getEntityBinding( Entity2.class.getName() );
|
||||
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
|
||||
@ -120,8 +118,7 @@ public void testCollectionId() {
|
||||
.addAnnotatedClass( Entity2.class )
|
||||
.buildMetadata();
|
||||
|
||||
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
|
||||
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
|
||||
final IdentifierGeneratorFactory generatorFactory = new StandardIdentifierGeneratorFactory( ssr );
|
||||
|
||||
final PersistentClass entity1Binding = metadata.getEntityBinding( Entity1.class.getName() );
|
||||
|
||||
@ -153,8 +150,7 @@ public void testUuid() {
|
||||
.addAnnotatedClass( Entity4.class )
|
||||
.buildMetadata();
|
||||
|
||||
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
|
||||
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
|
||||
final IdentifierGeneratorFactory generatorFactory = new StandardIdentifierGeneratorFactory( ssr );
|
||||
|
||||
final PersistentClass entityBinding = metadata.getEntityBinding( Entity4.class.getName() );
|
||||
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
|
||||
@ -177,8 +173,7 @@ public void testIncrement() {
|
||||
.addAnnotatedClass( Entity3.class )
|
||||
.buildMetadata();
|
||||
|
||||
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
|
||||
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
|
||||
final IdentifierGeneratorFactory generatorFactory = new StandardIdentifierGeneratorFactory( ssr );
|
||||
|
||||
final PersistentClass entityBinding = metadata.getEntityBinding( Entity3.class.getName() );
|
||||
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
|
||||
|
@ -43,7 +43,7 @@ public void testIdentifierGeneratorExtendsIdentityGenerator(DomainModelScope sco
|
||||
final PersistentClass entityBinding = domainModel.getEntityBinding( EntityBean.class.getName() );
|
||||
final KeyValue identifier = entityBinding.getIdentifier();
|
||||
|
||||
assertTrue( identifier.isIdentityColumn( domainModel.getIdentifierGeneratorFactory(), dialect ) );
|
||||
assertTrue( identifier.isIdentityColumn( domainModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(), dialect ) );
|
||||
}
|
||||
|
||||
@Entity(name = "EntityBean")
|
||||
|
@ -32,7 +32,8 @@
|
||||
import org.hibernate.dialect.H2Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
import org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory;
|
||||
import org.hibernate.id.factory.IdentifierGeneratorFactory;
|
||||
import org.hibernate.id.factory.internal.StandardIdentifierGeneratorFactory;
|
||||
import org.hibernate.mapping.PersistentClass;
|
||||
import org.hibernate.resource.beans.container.spi.BeanContainer;
|
||||
import org.hibernate.resource.beans.container.spi.BeanContainer.LifecycleOptions;
|
||||
@ -73,8 +74,7 @@ public void testCreateGeneratorsByBeanContainer() {
|
||||
.addAnnotatedClass( Entity2.class )
|
||||
.buildMetadata();
|
||||
|
||||
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
|
||||
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
|
||||
final IdentifierGeneratorFactory generatorFactory = new StandardIdentifierGeneratorFactory( ssr );
|
||||
|
||||
final PersistentClass entityBinding1 = metadata.getEntityBinding( Entity1.class.getName() );
|
||||
final PersistentClass entityBinding2 = metadata.getEntityBinding( Entity2.class.getName() );
|
||||
|
@ -6,14 +6,7 @@
|
||||
*/
|
||||
package org.hibernate.orm.test.jpa.compliance.tck2_2;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.SequenceGenerator;
|
||||
|
||||
import org.hibernate.annotations.GenericGenerator;
|
||||
import org.hibernate.boot.Metadata;
|
||||
import org.hibernate.boot.MetadataSources;
|
||||
import org.hibernate.boot.model.naming.Identifier;
|
||||
import org.hibernate.boot.model.relational.Database;
|
||||
@ -22,7 +15,7 @@
|
||||
import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl;
|
||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.boot.spi.MetadataImplementor;
|
||||
import org.hibernate.dialect.H2Dialect;
|
||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
@ -36,6 +29,12 @@
|
||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.SequenceGenerator;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
@ -53,12 +52,12 @@ public class GeneratedValueTests extends BaseUnitTestCase {
|
||||
@Test
|
||||
public void baseline() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ExplicitGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -81,12 +80,12 @@ public void baseline() {
|
||||
@Test
|
||||
public void testImplicitSequenceGenerator() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ImplicitSequenceGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitSequenceGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -112,12 +111,12 @@ public void testImplicitSequenceGenerator() {
|
||||
@Test
|
||||
public void testImplicitSequenceGeneratorGeneratorName() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ImplicitSequenceGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitSequenceGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -144,13 +143,13 @@ public void testImplicitSequenceGeneratorGeneratorName() {
|
||||
public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() {
|
||||
// this should be the default behavior
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ExplicitSequenceGeneratorImplicitNameEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding(
|
||||
ExplicitSequenceGeneratorImplicitNameEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -191,12 +190,12 @@ public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() {
|
||||
@Test
|
||||
public void testImplicitTableGenerator() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ImplicitTableGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitTableGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -217,12 +216,12 @@ public void testImplicitTableGenerator() {
|
||||
@Test
|
||||
public void testExplicitTableGeneratorImplicitName() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ExplicitTableGeneratorImplicitNameEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitTableGeneratorImplicitNameEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -243,12 +242,12 @@ public void testExplicitTableGeneratorImplicitName() {
|
||||
@Test
|
||||
public void testExplicitTableGenerator() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ExplicitTableGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitTableGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -271,12 +270,12 @@ public void testExplicitTableGenerator() {
|
||||
@Test
|
||||
public void testExplicitIncrementGenerator() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ExplicitIncrementGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitIncrementGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
@ -291,12 +290,12 @@ public void testExplicitIncrementGenerator() {
|
||||
@Test
|
||||
public void testImplicitIncrementGenerator() {
|
||||
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
|
||||
final Metadata bootModel = new MetadataSources( ssr )
|
||||
final MetadataImplementor bootModel = (MetadataImplementor) new MetadataSources( ssr )
|
||||
.addAnnotatedClass( ImplicitIncrementGeneratorEntity.class )
|
||||
.buildMetadata();
|
||||
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitIncrementGeneratorEntity.class.getName() );
|
||||
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
|
||||
bootModel.getIdentifierGeneratorFactory(),
|
||||
bootModel.getMetadataBuildingOptions().getIdentifierGeneratorFactory(),
|
||||
ssr.getService( JdbcEnvironment.class ).getDialect(),
|
||||
null,
|
||||
null,
|
||||
|
Loading…
x
Reference in New Issue
Block a user