Skip to content

Commit

Permalink
HHH-17460 - Ongoing JPA 32 work
Browse files Browse the repository at this point in the history
- org.hibernate.boot.spi.AdditionalMappingContributions.contributeManagedClass
  • Loading branch information
sebersole committed Mar 28, 2024
1 parent ece1cea commit 471dac1
Show file tree
Hide file tree
Showing 6 changed files with 229 additions and 58 deletions.
Expand Up @@ -38,6 +38,7 @@
import org.hibernate.dialect.DatabaseVersion;
import org.hibernate.dialect.Dialect;
import org.hibernate.internal.log.DeprecationLogger;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.mapping.Any;
import org.hibernate.mapping.AttributeContainer;
import org.hibernate.mapping.BasicValue;
Expand Down Expand Up @@ -883,7 +884,10 @@ static PropertyData getPropertyOverriddenByMapperOrMapsId(
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getMetadataCollector()
.getSourceModelBuildingContext()
.getClassDetailsRegistry();
final ClassDetails classDetails = classDetailsRegistry.resolveClassDetails( propertyHolder.getPersistentClass().getClassName() );
final String name = StringHelper.isEmpty( propertyHolder.getPersistentClass().getClassName() )
? propertyHolder.getPersistentClass().getEntityName()
: propertyHolder.getPersistentClass().getClassName();
final ClassDetails classDetails = classDetailsRegistry.resolveClassDetails( name );
final InFlightMetadataCollector metadataCollector = buildingContext.getMetadataCollector();
if ( propertyHolder.isInIdClass() ) {
final PropertyData data = metadataCollector.getPropertyAnnotatedWithIdAndToOne( classDetails, propertyName );
Expand Down
Expand Up @@ -70,6 +70,7 @@
import org.hibernate.boot.model.relational.QualifiedTableName;
import org.hibernate.boot.models.HibernateAnnotations;
import org.hibernate.boot.models.categorize.spi.JpaEventListener;
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
import org.hibernate.boot.spi.AccessType;
import org.hibernate.boot.spi.InFlightMetadataCollector;
import org.hibernate.boot.spi.MetadataBuildingContext;
Expand Down Expand Up @@ -1244,15 +1245,20 @@ private static void bindCallbacks(ClassDetails entityClass, PersistentClass pers

context.getMetadataCollector().addSecondPass( persistentClasses -> {
for ( Property property : persistentClass.getDeclaredProperties() ) {
final Class<?> mappedClass = persistentClass.getMappedClass();
if ( property.isComposite() ) {
for ( CallbackType type : CallbackType.values() ) {
property.addCallbackDefinitions( CallbackDefinitionResolver.resolveEmbeddableCallbacks(
context,
mappedClass,
property,
type
) );
try {
final Class<?> mappedClass = persistentClass.getMappedClass();
for ( CallbackType type : CallbackType.values() ) {
property.addCallbackDefinitions( CallbackDefinitionResolver.resolveEmbeddableCallbacks(
context,
mappedClass,
property,
type
) );
}
}
catch (ClassLoadingException ignore) {
// a dynamic embeddable... cannot define listener methods
}
}
}
Expand Down Expand Up @@ -1346,7 +1352,7 @@ public void bindEntity() {
bindFiltersInHierarchy();

persistentClass.setAbstract( annotatedClass.isAbstract() );
persistentClass.setClassName( annotatedClass.getName() );
persistentClass.setClassName( annotatedClass.getClassName() );
persistentClass.setJpaEntityName( name );
persistentClass.setEntityName( annotatedClass.getName() );
persistentClass.setCached( isCached );
Expand Down
Expand Up @@ -690,7 +690,7 @@ public void contributeManagedClass(ClassDetails classDetails) {
additionalClassDetails.add( classDetails );
metadataCollector.getSourceModelBuildingContext()
.getClassDetailsRegistry()
.addClassDetails( classDetails );
.addClassDetails( classDetails.getName(), classDetails );
}

@Override
Expand Down Expand Up @@ -761,7 +761,7 @@ public void contributeAuxiliaryDatabaseObject(AuxiliaryDatabaseObject auxiliaryD

public void complete() {
// annotations / orm.xml
if ( additionalEntityClasses != null || additionalJaxbMappings != null ) {
if ( additionalEntityClasses != null || additionalClassDetails != null || additionalJaxbMappings != null ) {
AnnotationMetadataSourceProcessorImpl.processAdditionalMappings(
additionalEntityClasses,
additionalClassDetails,
Expand Down
Expand Up @@ -15,13 +15,16 @@
import org.hibernate.boot.jaxb.Origin;
import org.hibernate.boot.jaxb.SourceType;
import org.hibernate.boot.jaxb.internal.MappingBinder;
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
import org.hibernate.boot.jaxb.spi.Binding;
import org.hibernate.boot.jaxb.spi.JaxbBindableMappingDescriptor;
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
import org.hibernate.boot.model.process.spi.ManagedResources;
import org.hibernate.internal.util.collections.CollectionHelper;
import org.hibernate.models.spi.ClassDetails;

import static org.hibernate.boot.jaxb.SourceType.OTHER;

/**
* @author Steve Ebersole
*/
Expand Down Expand Up @@ -110,10 +113,12 @@ public Builder(MappingBinder.Options options) {
}

public Builder addLoadedClasses(List<Class<?>> additionalClasses) {
if ( this.classes == null ) {
this.classes = new ArrayList<>();
if ( additionalClasses != null ) {
if ( this.classes == null ) {
this.classes = new ArrayList<>();
}
this.classes.addAll( additionalClasses );
}
this.classes.addAll( additionalClasses );
return this;
}

Expand Down Expand Up @@ -165,5 +170,14 @@ public Builder addXmlBinding(Binding<JaxbBindableMappingDescriptor> binding) {
xmlMappings.add( binding );
return this;
}

public void addJaxbEntityMappings(List<JaxbEntityMappingsImpl> additionalJaxbMappings) {
if ( additionalJaxbMappings == null ) {
return;
}
for ( JaxbEntityMappingsImpl additionalJaxbMapping : additionalJaxbMappings ) {
addXmlBinding( new Binding<>( additionalJaxbMapping, new Origin( OTHER, "additional" ) ) );
}
}
}
}
Expand Up @@ -123,9 +123,7 @@ public static void processAdditionalMappings(
final AdditionalManagedResourcesImpl.Builder mrBuilder = new AdditionalManagedResourcesImpl.Builder();
mrBuilder.addLoadedClasses( additionalClasses );
mrBuilder.addClassDetails( additionalClassDetails );
for ( JaxbEntityMappingsImpl additionalJaxbMapping : additionalJaxbMappings ) {
mrBuilder.addXmlBinding( new Binding<>( additionalJaxbMapping, new Origin( OTHER, "additional" ) ) );
}
mrBuilder.addJaxbEntityMappings( additionalJaxbMappings );

final ManagedResources mr = mrBuilder.build();
final DomainModelSource additionalDomainModelSource = MetadataBuildingProcess.processManagedResources(
Expand Down

0 comments on commit 471dac1

Please sign in to comment.