Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator;
import org.hibernate.type.spi.TypeConfiguration;

import static java.lang.String.join;
import static org.hibernate.cfg.AvailableSettings.EVENT_LISTENER_PREFIX;
import static org.hibernate.internal.util.StringHelper.splitAtCommas;
import static org.hibernate.internal.util.collections.CollectionHelper.mapOfSize;
Expand Down Expand Up @@ -164,17 +165,26 @@ public SqmFunctionRegistry getFunctionRegistry() {

@Override
public SessionFactoryBuilder getSessionFactoryBuilder() {
final SessionFactoryBuilderService factoryBuilderService = metadataBuildingOptions.getServiceRegistry().requireService( SessionFactoryBuilderService.class );
final SessionFactoryBuilderImplementor defaultBuilder = factoryBuilderService.createSessionFactoryBuilder( this, bootstrapContext );
final SessionFactoryBuilderImplementor defaultBuilder =
metadataBuildingOptions.getServiceRegistry()
.requireService( SessionFactoryBuilderService.class )
.createSessionFactoryBuilder( this, bootstrapContext );
final SessionFactoryBuilder builder = discoverBuilder( defaultBuilder );
return builder != null ? builder : defaultBuilder;

final ClassLoaderService cls = metadataBuildingOptions.getServiceRegistry().requireService( ClassLoaderService.class );
final java.util.Collection<SessionFactoryBuilderFactory> discoveredBuilderFactories = cls.loadJavaServices( SessionFactoryBuilderFactory.class );
}

private SessionFactoryBuilder discoverBuilder(SessionFactoryBuilderImplementor defaultBuilder) {
final java.util.Collection<SessionFactoryBuilderFactory> discoveredBuilderFactories =
metadataBuildingOptions.getServiceRegistry().requireService( ClassLoaderService.class )
.loadJavaServices( SessionFactoryBuilderFactory.class );

SessionFactoryBuilder builder = null;
List<String> activeFactoryNames = null;

for ( SessionFactoryBuilderFactory discoveredBuilderFactory : discoveredBuilderFactories ) {
final SessionFactoryBuilder returnedBuilder = discoveredBuilderFactory.getSessionFactoryBuilder( this, defaultBuilder );
final SessionFactoryBuilder returnedBuilder =
discoveredBuilderFactory.getSessionFactoryBuilder( this, defaultBuilder );
if ( returnedBuilder != null ) {
if ( activeFactoryNames == null ) {
activeFactoryNames = new ArrayList<>();
Expand All @@ -186,16 +196,11 @@ public SessionFactoryBuilder getSessionFactoryBuilder() {

if ( activeFactoryNames != null && activeFactoryNames.size() > 1 ) {
throw new HibernateException(
"Multiple active SessionFactoryBuilderFactory definitions were discovered : " +
String.join(", ", activeFactoryNames)
"Multiple active SessionFactoryBuilderFactory definitions were discovered: " +
join( ", ", activeFactoryNames )
);
}

if ( builder != null ) {
return builder;
}

return defaultBuilder;
return builder;
}

@Override
Expand Down Expand Up @@ -423,8 +428,7 @@ public void orderColumns(boolean forceOrdering) {
}
}
for ( UserDefinedType userDefinedType : namespace.getUserDefinedTypes() ) {
if ( userDefinedType instanceof UserDefinedObjectType ) {
final UserDefinedObjectType objectType = (UserDefinedObjectType) userDefinedType;
if ( userDefinedType instanceof UserDefinedObjectType objectType ) {
if ( objectType.getColumns().size() > 1 ) {
final List<Column> objectTypeColumns = columnOrderingStrategy.orderUserDefinedTypeColumns(
objectType,
Expand All @@ -440,32 +444,28 @@ public void orderColumns(boolean forceOrdering) {
}

private boolean shouldOrderTableColumns() {
final ConfigurationService configurationService = metadataBuildingOptions.getServiceRegistry()
.requireService( ConfigurationService.class );
final Set<SchemaManagementToolCoordinator.ActionGrouping> groupings = SchemaManagementToolCoordinator.ActionGrouping.interpret(
this,
configurationService.getSettings()
);
final ConfigurationService configurationService =
metadataBuildingOptions.getServiceRegistry().requireService( ConfigurationService.class );
final Set<SchemaManagementToolCoordinator.ActionGrouping> groupings =
SchemaManagementToolCoordinator.ActionGrouping.interpret( this,
configurationService.getSettings() );
if ( groupings.isEmpty() ) {
return false;
}
for ( SchemaManagementToolCoordinator.ActionGrouping grouping : groupings ) {
if ( isColumnOrderingRelevant( grouping.getScriptAction() ) || isColumnOrderingRelevant( grouping.getDatabaseAction() ) ) {
if ( isColumnOrderingRelevant( grouping.getScriptAction() )
|| isColumnOrderingRelevant( grouping.getDatabaseAction() ) ) {
return true;
}
}
return false;
}

private static boolean isColumnOrderingRelevant(Action grouping) {
switch ( grouping ) {
case CREATE:
case CREATE_DROP:
case CREATE_ONLY:
return true;
default:
return false;
}
return switch ( grouping ) {
case CREATE, CREATE_DROP, CREATE_ONLY -> true;
default -> false;
};
}

@Override
Expand All @@ -489,14 +489,15 @@ public Set<MappedSuperclass> getMappedSuperclassMappingsCopy() {
@Override
public void initSessionFactory(SessionFactoryImplementor sessionFactory) {
final ServiceRegistryImplementor sessionFactoryServiceRegistry = sessionFactory.getServiceRegistry();

assert sessionFactoryServiceRegistry != null;

final EventListenerRegistry eventListenerRegistry = sessionFactoryServiceRegistry.requireService( EventListenerRegistry.class );
final ConfigurationService cfgService = sessionFactoryServiceRegistry.requireService( ConfigurationService.class );
final ClassLoaderService classLoaderService = sessionFactoryServiceRegistry.requireService( ClassLoaderService.class );

for ( Map.Entry<String,Object> entry : cfgService.getSettings().entrySet() ) {
final EventListenerRegistry eventListenerRegistry =
sessionFactoryServiceRegistry.requireService( EventListenerRegistry.class );
final ConfigurationService configurationService =
sessionFactoryServiceRegistry.requireService( ConfigurationService.class );
final ClassLoaderService classLoaderService =
sessionFactoryServiceRegistry.requireService( ClassLoaderService.class );

for ( Map.Entry<String,Object> entry : configurationService.getSettings().entrySet() ) {
final String propertyName = entry.getKey();
if ( propertyName.startsWith( EVENT_LISTENER_PREFIX ) ) {
final String eventTypeName = propertyName.substring( EVENT_LISTENER_PREFIX.length() + 1 );
Expand All @@ -517,8 +518,8 @@ private <T> void appendListeners(
@SuppressWarnings("unchecked")
T listener = (T) instantiate( listenerImpl, classLoaderService );
if ( !eventType.baseListenerInterface().isInstance( listener ) ) {
throw new HibernateException( "Event listener '" + listenerImpl + "' must implement '"
+ eventType.baseListenerInterface().getName() + "'");
throw new HibernateException( "Event listener '" + listenerImpl
+ "' must implement '" + eventType.baseListenerInterface().getName() + "'");
}
eventListenerGroup.appendListener( listener );
}
Expand Down Expand Up @@ -554,7 +555,7 @@ public DiscriminatorType<?> resolveEmbeddableDiscriminatorType(
public org.hibernate.type.Type getIdentifierType(String entityName) throws MappingException {
final PersistentClass pc = entityBindingMap.get( entityName );
if ( pc == null ) {
throw new MappingException( "persistent class not known: " + entityName );
throw new MappingException( "Persistent class not known: " + entityName );
}
return pc.getIdentifier().getType();
}
Expand All @@ -563,7 +564,7 @@ public org.hibernate.type.Type getIdentifierType(String entityName) throws Mappi
public String getIdentifierPropertyName(String entityName) throws MappingException {
final PersistentClass pc = entityBindingMap.get( entityName );
if ( pc == null ) {
throw new MappingException( "persistent class not known: " + entityName );
throw new MappingException( "Persistent class not known: " + entityName );
}
if ( !pc.hasIdentifierProperty() ) {
return null;
Expand All @@ -575,14 +576,11 @@ public String getIdentifierPropertyName(String entityName) throws MappingExcepti
public org.hibernate.type.Type getReferencedPropertyType(String entityName, String propertyName) throws MappingException {
final PersistentClass pc = entityBindingMap.get( entityName );
if ( pc == null ) {
throw new MappingException( "persistent class not known: " + entityName );
throw new MappingException( "Persistent class not known: " + entityName );
}
Property prop = pc.getReferencedProperty( propertyName );
final Property prop = pc.getReferencedProperty( propertyName );
if ( prop == null ) {
throw new MappingException(
"property not known: " +
entityName + '.' + propertyName
);
throw new MappingException( "Property not known: " + entityName + '.' + propertyName );
}
return prop.getType();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ protected boolean handleAsMetaAnnotated() {
}

private Annotation findGeneratorAnnotation(AnnotationTarget annotationTarget) {
final List<? extends Annotation> metaAnnotated = annotationTarget.getMetaAnnotated( IdGeneratorType.class, buildingContext.getMetadataCollector().getSourceModelBuildingContext() );
final List<? extends Annotation> metaAnnotated =
annotationTarget.getMetaAnnotated( IdGeneratorType.class,
buildingContext.getMetadataCollector().getSourceModelBuildingContext() );
if ( CollectionHelper.size( metaAnnotated ) > 0 ) {
return metaAnnotated.get( 0 );
}
Expand All @@ -149,12 +151,14 @@ protected boolean handleAsLegacyGenerator() {
// Handle a few legacy Hibernate generators...
final String nameFromGeneratedValue = generatedValue.generator();
if ( !nameFromGeneratedValue.isBlank() ) {
final Class<? extends Generator> legacyNamedGenerator = mapLegacyNamedGenerator( nameFromGeneratedValue, idValue );
final Class<? extends Generator> legacyNamedGenerator =
mapLegacyNamedGenerator( nameFromGeneratedValue, idValue );
if ( legacyNamedGenerator != null ) {
final Map<String,String> configuration = buildLegacyGeneratorConfig();
//noinspection unchecked,rawtypes
GeneratorBinder.createGeneratorFrom(
new IdentifierGeneratorDefinition( nameFromGeneratedValue, legacyNamedGenerator.getName(), configuration ),
new IdentifierGeneratorDefinition( nameFromGeneratedValue,
legacyNamedGenerator.getName(), configuration ),
idValue,
(Map) configuration,
buildingContext
Expand Down
Loading
Loading