From 6183e7e6061662a698815d45a3dcd479c68efcc3 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Sat, 23 Mar 2024 11:23:13 +0100 Subject: [PATCH] HHH-17460 - Ongoing JPA 32 work --- .../InFlightMetadataCollectorImpl.java | 8 +++++-- .../process/spi/MetadataBuildingProcess.java | 1 + .../xml/internal/XmlAnnotationHelper.java | 23 +++++++++---------- .../models/xml/internal/XmlDocumentImpl.java | 4 ++-- .../boot/spi/InFlightMetadataCollector.java | 2 ++ 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java index b5b5b9f56a..921e41d388 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java @@ -145,7 +145,7 @@ public class InFlightMetadataCollectorImpl implements InFlightMetadataCollector, private final MetadataBuildingOptions options; private final GlobalRegistrations globalRegistrations; - private final PersistenceUnitMetadata persistenceUnitMetadata; + private PersistenceUnitMetadata persistenceUnitMetadata; private final AttributeConverterManager attributeConverterManager = new AttributeConverterManager(); @@ -204,7 +204,6 @@ public class InFlightMetadataCollectorImpl implements InFlightMetadataCollector, this.uuid = UUID.randomUUID(); this.globalRegistrations = new GlobalRegistrationsImpl( sourceModelBuildingContext ); - this.persistenceUnitMetadata = new PersistenceUnitMetadataImpl(); for ( Map.Entry sqlFunctionEntry : bootstrapContext.getSqlFunctions().entrySet() ) { if ( sqlFunctionMap == null ) { @@ -729,6 +728,11 @@ public class InFlightMetadataCollectorImpl implements InFlightMetadataCollector, } } + @Override + public void addPersistenceUnitMetadata(PersistenceUnitMetadata persistenceUnitMetadata) { + this.persistenceUnitMetadata = persistenceUnitMetadata; + } + @Override public void addDefaultIdentifierGenerator(IdentifierGeneratorDefinition generator) { this.addIdentifierGenerator( generator ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java b/hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java index 5b222f0c29..42c006fdc5 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java @@ -424,6 +424,7 @@ public class MetadataBuildingProcess { assert metadataCollector.getPersistenceUnitMetadata() == xmlPreProcessingResult.getPersistenceUnitMetadata(); + metadataCollector.addPersistenceUnitMetadata( xmlPreProcessingResult.getPersistenceUnitMetadata() ); //noinspection unchecked final List allKnownClassNames = mutableJoin( managedResources.getAnnotatedClassReferences().stream().map( Class::getName ).collect( Collectors.toList() ), diff --git a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlAnnotationHelper.java b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlAnnotationHelper.java index 920cfc61e4..061bec4141 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlAnnotationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlAnnotationHelper.java @@ -88,7 +88,6 @@ import org.hibernate.boot.jaxb.mapping.spi.JaxbUuidGeneratorImpl; import org.hibernate.boot.jaxb.mapping.spi.db.JaxbCheckable; import org.hibernate.boot.jaxb.mapping.spi.db.JaxbColumnJoined; import org.hibernate.boot.jaxb.mapping.spi.db.JaxbTableMapping; -import org.hibernate.boot.models.JpaAnnotations; import org.hibernate.boot.models.categorize.spi.JpaEventListener; import org.hibernate.boot.models.categorize.spi.JpaEventListenerStyle; import org.hibernate.boot.models.internal.AnnotationUsageHelper; @@ -985,16 +984,12 @@ public class XmlAnnotationHelper { JaxbTableImpl jaxbTable, MutableAnnotationTarget target, XmlDocumentContext xmlDocumentContext) { - final MutableAnnotationUsage tableAnn = XmlProcessingHelper.makeAnnotation( Table.class, target, xmlDocumentContext ); - final AnnotationDescriptor
tableDescriptor = xmlDocumentContext.getModelBuildingContext() - .getAnnotationDescriptorRegistry() - .getDescriptor( Table.class ); - if ( jaxbTable == null ) { final XmlDocument.Defaults defaults = xmlDocumentContext.getXmlDocument().getDefaults(); final String catalog = defaults.getCatalog(); final String schema = defaults.getSchema(); if ( StringHelper.isNotEmpty( catalog ) || StringHelper.isNotEmpty( schema ) ) { + final MutableAnnotationUsage
tableAnn = XmlProcessingHelper.makeAnnotation( Table.class, target, xmlDocumentContext ); if ( StringHelper.isNotEmpty( catalog ) ) { tableAnn.setAttributeValue( "catalog", catalog ); @@ -1005,6 +1000,10 @@ public class XmlAnnotationHelper { } } else { + final MutableAnnotationUsage
tableAnn = XmlProcessingHelper.makeAnnotation( Table.class, target, xmlDocumentContext ); + final AnnotationDescriptor
tableDescriptor = xmlDocumentContext.getModelBuildingContext() + .getAnnotationDescriptorRegistry() + .getDescriptor( Table.class ); applyOr( jaxbTable, JaxbTableImpl::getName, "name", tableAnn, tableDescriptor ); applyTableAttributes( jaxbTable, target, tableAnn, tableDescriptor, xmlDocumentContext ); } @@ -1742,9 +1741,9 @@ public class XmlAnnotationHelper { XmlDocumentContext xmlDocumentContext) { applyOr( jaxbNode, - (collectionTable) -> { - if ( StringHelper.isNotEmpty( collectionTable.getSchema() ) ) { - return collectionTable.getSchema(); + (table) -> { + if ( StringHelper.isNotEmpty( table.getSchema() ) ) { + return table.getSchema(); } else if ( StringHelper.isNotEmpty( defaultSchema( xmlDocumentContext ) ) ) { return defaultSchema( xmlDocumentContext ); @@ -1770,9 +1769,9 @@ public class XmlAnnotationHelper { XmlDocumentContext xmlDocumentContext) { applyOr( jaxbNode, - (collectionTable) -> { - if ( StringHelper.isNotEmpty( collectionTable.getCatalog() ) ) { - return collectionTable.getCatalog(); + (table) -> { + if ( StringHelper.isNotEmpty( table.getCatalog() ) ) { + return table.getCatalog(); } else if ( StringHelper.isNotEmpty( defaultCatalog( xmlDocumentContext ) ) ) { return defaultCatalog( xmlDocumentContext ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlDocumentImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlDocumentImpl.java index 638e247034..91490573e9 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlDocumentImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlDocumentImpl.java @@ -246,8 +246,8 @@ public class XmlDocumentImpl implements XmlDocument { jaxbRoot.getPackage(), NullnessHelper.coalesce( jaxbRoot.getAccess(), metadata.getAccessType() ), NullnessHelper.coalesce( jaxbRoot.getAttributeAccessor(), metadata.getDefaultAccessStrategyName() ), - NullnessHelper.coalesce( jaxbRoot.getCatalog(), metadata.getDefaultCatalog() ), - NullnessHelper.coalesce( jaxbRoot.getSchema(), metadata.getDefaultSchema() ), + jaxbRoot.getCatalog(), + jaxbRoot.getSchema(), jaxbRoot.isAutoImport(), jaxbRoot.isDefaultLazy() ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java index 74ac9a295b..d016bca3d7 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java @@ -253,6 +253,8 @@ public interface InFlightMetadataCollector extends MetadataImplementor { void addIdentifierGenerator(IdentifierGeneratorDefinition generatorDefinition); + void addPersistenceUnitMetadata(PersistenceUnitMetadata persistenceUnitMetadata); + /** * Obtain the {@link ConverterRegistry} which may be * used to register {@link AttributeConverter}s.