Skip to content

Commit baed428

Browse files
committed
HHH-17460 - Ongoing JPA 32 work
- org.hibernate.boot.spi.AdditionalMappingContributions.contributeManagedClass
1 parent d3b235b commit baed428

File tree

6 files changed

+229
-58
lines changed

6 files changed

+229
-58
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/internal/BinderHelper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.hibernate.boot.spi.MetadataBuildingContext;
3636
import org.hibernate.boot.spi.PropertyData;
3737
import org.hibernate.internal.log.DeprecationLogger;
38+
import org.hibernate.internal.util.StringHelper;
3839
import org.hibernate.mapping.Any;
3940
import org.hibernate.mapping.AttributeContainer;
4041
import org.hibernate.mapping.BasicValue;
@@ -880,7 +881,10 @@ static PropertyData getPropertyOverriddenByMapperOrMapsId(
880881
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getMetadataCollector()
881882
.getSourceModelBuildingContext()
882883
.getClassDetailsRegistry();
883-
final ClassDetails classDetails = classDetailsRegistry.resolveClassDetails( propertyHolder.getPersistentClass().getClassName() );
884+
final String name = StringHelper.isEmpty( propertyHolder.getPersistentClass().getClassName() )
885+
? propertyHolder.getPersistentClass().getEntityName()
886+
: propertyHolder.getPersistentClass().getClassName();
887+
final ClassDetails classDetails = classDetailsRegistry.resolveClassDetails( name );
884888
final InFlightMetadataCollector metadataCollector = buildingContext.getMetadataCollector();
885889
if ( propertyHolder.isInIdClass() ) {
886890
final PropertyData data = metadataCollector.getPropertyAnnotatedWithIdAndToOne( classDetails, propertyName );

hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import org.hibernate.boot.model.relational.QualifiedTableName;
7272
import org.hibernate.boot.models.HibernateAnnotations;
7373
import org.hibernate.boot.models.categorize.spi.JpaEventListener;
74+
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
7475
import org.hibernate.boot.spi.AccessType;
7576
import org.hibernate.boot.spi.InFlightMetadataCollector;
7677
import org.hibernate.boot.spi.MetadataBuildingContext;
@@ -1249,15 +1250,20 @@ private static void bindCallbacks(ClassDetails entityClass, PersistentClass pers
12491250

12501251
context.getMetadataCollector().addSecondPass( persistentClasses -> {
12511252
for ( Property property : persistentClass.getDeclaredProperties() ) {
1252-
final Class<?> mappedClass = persistentClass.getMappedClass();
12531253
if ( property.isComposite() ) {
1254-
for ( CallbackType type : CallbackType.values() ) {
1255-
property.addCallbackDefinitions( CallbackDefinitionResolver.resolveEmbeddableCallbacks(
1256-
context,
1257-
mappedClass,
1258-
property,
1259-
type
1260-
) );
1254+
try {
1255+
final Class<?> mappedClass = persistentClass.getMappedClass();
1256+
for ( CallbackType type : CallbackType.values() ) {
1257+
property.addCallbackDefinitions( CallbackDefinitionResolver.resolveEmbeddableCallbacks(
1258+
context,
1259+
mappedClass,
1260+
property,
1261+
type
1262+
) );
1263+
}
1264+
}
1265+
catch (ClassLoadingException ignore) {
1266+
// a dynamic embeddable... cannot define listener methods
12611267
}
12621268
}
12631269
}
@@ -1352,7 +1358,7 @@ public void bindEntity() {
13521358
bindFiltersInHierarchy();
13531359

13541360
persistentClass.setAbstract( annotatedClass.isAbstract() );
1355-
persistentClass.setClassName( annotatedClass.getName() );
1361+
persistentClass.setClassName( annotatedClass.getClassName() );
13561362
persistentClass.setJpaEntityName( name );
13571363
persistentClass.setEntityName( annotatedClass.getName() );
13581364
persistentClass.setCached( isCached );

hibernate-core/src/main/java/org/hibernate/boot/model/process/spi/MetadataBuildingProcess.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,7 @@ public void contributeManagedClass(ClassDetails classDetails) {
690690
additionalClassDetails.add( classDetails );
691691
metadataCollector.getSourceModelBuildingContext()
692692
.getClassDetailsRegistry()
693-
.addClassDetails( classDetails );
693+
.addClassDetails( classDetails.getName(), classDetails );
694694
}
695695

696696
@Override
@@ -761,7 +761,7 @@ public void contributeAuxiliaryDatabaseObject(AuxiliaryDatabaseObject auxiliaryD
761761

762762
public void complete() {
763763
// annotations / orm.xml
764-
if ( additionalEntityClasses != null || additionalJaxbMappings != null ) {
764+
if ( additionalEntityClasses != null || additionalClassDetails != null || additionalJaxbMappings != null ) {
765765
AnnotationMetadataSourceProcessorImpl.processAdditionalMappings(
766766
additionalEntityClasses,
767767
additionalClassDetails,

hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/annotations/AdditionalManagedResourcesImpl.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
import org.hibernate.boot.jaxb.Origin;
1616
import org.hibernate.boot.jaxb.SourceType;
1717
import org.hibernate.boot.jaxb.internal.MappingBinder;
18+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
1819
import org.hibernate.boot.jaxb.spi.Binding;
1920
import org.hibernate.boot.jaxb.spi.JaxbBindableMappingDescriptor;
2021
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
2122
import org.hibernate.boot.model.process.spi.ManagedResources;
2223
import org.hibernate.internal.util.collections.CollectionHelper;
2324
import org.hibernate.models.spi.ClassDetails;
2425

26+
import static org.hibernate.boot.jaxb.SourceType.OTHER;
27+
2528
/**
2629
* @author Steve Ebersole
2730
*/
@@ -110,10 +113,12 @@ public Builder(MappingBinder.Options options) {
110113
}
111114

112115
public Builder addLoadedClasses(List<Class<?>> additionalClasses) {
113-
if ( this.classes == null ) {
114-
this.classes = new ArrayList<>();
116+
if ( additionalClasses != null ) {
117+
if ( this.classes == null ) {
118+
this.classes = new ArrayList<>();
119+
}
120+
this.classes.addAll( additionalClasses );
115121
}
116-
this.classes.addAll( additionalClasses );
117122
return this;
118123
}
119124

@@ -165,5 +170,14 @@ public Builder addXmlBinding(Binding<JaxbBindableMappingDescriptor> binding) {
165170
xmlMappings.add( binding );
166171
return this;
167172
}
173+
174+
public void addJaxbEntityMappings(List<JaxbEntityMappingsImpl> additionalJaxbMappings) {
175+
if ( additionalJaxbMappings == null ) {
176+
return;
177+
}
178+
for ( JaxbEntityMappingsImpl additionalJaxbMapping : additionalJaxbMappings ) {
179+
addXmlBinding( new Binding<>( additionalJaxbMapping, new Origin( OTHER, "additional" ) ) );
180+
}
181+
}
168182
}
169183
}

hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/annotations/AnnotationMetadataSourceProcessorImpl.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,7 @@ public static void processAdditionalMappings(
122122
final AdditionalManagedResourcesImpl.Builder mrBuilder = new AdditionalManagedResourcesImpl.Builder();
123123
mrBuilder.addLoadedClasses( additionalClasses );
124124
mrBuilder.addClassDetails( additionalClassDetails );
125-
for ( JaxbEntityMappingsImpl additionalJaxbMapping : additionalJaxbMappings ) {
126-
mrBuilder.addXmlBinding( new Binding<>( additionalJaxbMapping, new Origin( OTHER, "additional" ) ) );
127-
}
125+
mrBuilder.addJaxbEntityMappings( additionalJaxbMappings );
128126

129127
final ManagedResources mr = mrBuilder.build();
130128
final DomainModelSource additionalDomainModelSource = MetadataBuildingProcess.processManagedResources(

0 commit comments

Comments
 (0)