Skip to content

Commit 17c6a8f

Browse files
committed
HHH-19317 - Mark org.hibernate.boot.models as incubating
1 parent ec026fc commit 17c6a8f

File tree

21 files changed

+214
-241
lines changed

21 files changed

+214
-241
lines changed

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.hibernate.boot.model.source.internal.hbm.ModelBinder;
5151
import org.hibernate.boot.model.source.spi.MetadataSourceProcessor;
5252
import org.hibernate.boot.models.internal.DomainModelCategorizationCollector;
53+
import org.hibernate.boot.models.xml.spi.PersistenceUnitMetadata;
5354
import org.hibernate.boot.models.xml.spi.XmlPreProcessingResult;
5455
import org.hibernate.boot.models.xml.spi.XmlPreProcessor;
5556
import org.hibernate.boot.models.xml.spi.XmlProcessingResult;
@@ -371,14 +372,13 @@ public static DomainModelSource processManagedResources(
371372
// - allKnownClassNames (technically could be included in xmlPreProcessingResult)
372373
// - ModelsContext
373374

375+
final PersistenceUnitMetadata aggregatedPersistenceUnitMetadata = metadataCollector.getPersistenceUnitMetadata();
374376
final ModelsContext modelsContext = bootstrapContext.getModelsContext();
375377
final XmlPreProcessingResult xmlPreProcessingResult = XmlPreProcessor.preProcessXmlResources(
376378
managedResources,
377-
metadataCollector.getPersistenceUnitMetadata()
379+
aggregatedPersistenceUnitMetadata
378380
);
379381

380-
assert metadataCollector.getPersistenceUnitMetadata() == xmlPreProcessingResult.getPersistenceUnitMetadata();
381-
382382
final List<String> allKnownClassNames = mutableJoin(
383383
managedResources.getAnnotatedClassReferences().stream().map( Class::getName ).collect( Collectors.toList() ),
384384
managedResources.getAnnotatedClassNames(),
@@ -411,22 +411,20 @@ public static DomainModelSource processManagedResources(
411411
// - mappedSuperClasses
412412
// - embeddables
413413

414-
// JPA id generator global-ity thing
415-
final boolean areIdGeneratorsGlobal = true;
416414
final ClassDetailsRegistry classDetailsRegistry = modelsContext.getClassDetailsRegistry();
417415
final DomainModelCategorizationCollector modelCategorizationCollector = new DomainModelCategorizationCollector(
418-
areIdGeneratorsGlobal,
419416
metadataCollector.getGlobalRegistrations(),
420417
modelsContext
421418
);
422419

423420
final RootMappingDefaults rootMappingDefaults = new RootMappingDefaults(
424421
optionDefaults,
425-
xmlPreProcessingResult.getPersistenceUnitMetadata()
422+
aggregatedPersistenceUnitMetadata
426423
);
427424
final XmlProcessingResult xmlProcessingResult = XmlProcessor.processXml(
428425
xmlPreProcessingResult,
429-
modelCategorizationCollector,
426+
aggregatedPersistenceUnitMetadata,
427+
modelCategorizationCollector::apply,
430428
modelsContext,
431429
bootstrapContext,
432430
rootMappingDefaults
@@ -446,14 +444,14 @@ public static DomainModelSource processManagedResources(
446444
modelCategorizationCollector
447445
) );
448446

449-
xmlProcessingResult.apply( xmlPreProcessingResult.getPersistenceUnitMetadata() );
447+
xmlProcessingResult.apply();
450448

451449
return new DomainModelSource(
452450
classDetailsRegistry,
453451
allKnownClassNames,
454452
modelCategorizationCollector.getGlobalRegistrations(),
455453
rootMappingDefaults,
456-
xmlPreProcessingResult.getPersistenceUnitMetadata()
454+
aggregatedPersistenceUnitMetadata
457455
);
458456
}
459457

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ public Builder(EffectiveMappingDefaults parentDefaults) {
170170
this.autoImportEnabled = parentDefaults.isDefaultAutoImport();
171171

172172
this.implicitCascadeTypes = parentDefaults.getDefaultCascadeTypes();
173+
this.implicitPropertyAccessType = parentDefaults.getDefaultPropertyAccessType();
173174
this.implicitPropertyAccessorName = parentDefaults.getDefaultAccessStrategyName();
174175
this.entitiesImplicitlyLazy = parentDefaults.isDefaultEntityLaziness();
175176
this.pluralAttributesImplicitlyLazy = parentDefaults.isDefaultCollectionLaziness();

hibernate-core/src/main/java/org/hibernate/boot/models/internal/DomainModelCategorizationCollector.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
* @author Steve Ebersole
3030
*/
3131
public class DomainModelCategorizationCollector {
32-
private final boolean areIdGeneratorsGlobal;
33-
3432
private final GlobalRegistrationsImpl globalRegistrations;
3533
private final ModelsContext modelsContext;
3634

@@ -39,10 +37,8 @@ public class DomainModelCategorizationCollector {
3937
private final Map<String,ClassDetails> embeddables = new HashMap<>();
4038

4139
public DomainModelCategorizationCollector(
42-
boolean areIdGeneratorsGlobal,
4340
GlobalRegistrations globalRegistrations,
4441
ModelsContext modelsContext) {
45-
this.areIdGeneratorsGlobal = areIdGeneratorsGlobal;
4642
this.globalRegistrations = (GlobalRegistrationsImpl) globalRegistrations;
4743
this.modelsContext = modelsContext;
4844
}

hibernate-core/src/main/java/org/hibernate/boot/models/package-info.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
* building the {@code hibernate-models} model ({@linkplain org.hibernate.models.spi.ClassDetails}, etc.)
1010
* to ultimately be bound into Hibernate's {@linkplain org.hibernate.mapping boot-time model}.
1111
*
12+
* @apiNote This entire package is considered incubating
13+
*
1214
* @author Steve Ebersole
1315
*/
16+
@Incubating
1417
package org.hibernate.boot.models;
18+
19+
import org.hibernate.Incubating;

hibernate-core/src/main/java/org/hibernate/boot/models/spi/JpaEventListener.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@
4141
* @see JaxbEntityListenerImpl
4242
* @see GlobalRegistrations#getEntityListenerRegistrations()
4343
*
44+
* @see jakarta.persistence.PostLoad
45+
* @see jakarta.persistence.PostPersist
46+
* @see jakarta.persistence.PostRemove
47+
* @see jakarta.persistence.PostUpdate
48+
* @see jakarta.persistence.PrePersist
49+
* @see jakarta.persistence.PreRemove
50+
* @see jakarta.persistence.PreUpdate
51+
*
4452
* @author Steve Ebersole
4553
*/
4654
public class JpaEventListener {
@@ -59,7 +67,7 @@ public class JpaEventListener {
5967

6068
private final MethodDetails postLoadMethod;
6169

62-
private JpaEventListener(
70+
public JpaEventListener(
6371
JpaEventListenerStyle consumerType,
6472
ClassDetails listenerClass,
6573
MethodDetails prePersistMethod,

hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlDocumentImpl.java

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@
44
*/
55
package org.hibernate.boot.models.xml.internal;
66

7-
import java.util.Collections;
8-
import java.util.HashMap;
9-
import java.util.List;
10-
import java.util.Map;
11-
7+
import jakarta.persistence.AccessType;
8+
import org.hibernate.boot.jaxb.Origin;
129
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmNamedNativeQueryType;
1310
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmNamedQueryType;
1411
import org.hibernate.boot.jaxb.mapping.spi.JaxbCollectionUserTypeRegistrationImpl;
@@ -22,22 +19,28 @@
2219
import org.hibernate.boot.jaxb.mapping.spi.JaxbJavaTypeRegistrationImpl;
2320
import org.hibernate.boot.jaxb.mapping.spi.JaxbJdbcTypeRegistrationImpl;
2421
import org.hibernate.boot.jaxb.mapping.spi.JaxbMappedSuperclassImpl;
25-
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedNativeQueryImpl;
2622
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedHqlQueryImpl;
23+
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedNativeQueryImpl;
2724
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedStoredProcedureQueryImpl;
2825
import org.hibernate.boot.jaxb.mapping.spi.JaxbUserTypeRegistrationImpl;
26+
import org.hibernate.boot.jaxb.spi.Binding;
2927
import org.hibernate.boot.models.xml.spi.PersistenceUnitMetadata;
3028
import org.hibernate.boot.models.xml.spi.XmlDocument;
3129
import org.hibernate.internal.util.NullnessHelper;
3230

33-
import jakarta.persistence.AccessType;
31+
import java.util.Collections;
32+
import java.util.HashMap;
33+
import java.util.List;
34+
import java.util.Map;
3435

3536
import static org.hibernate.internal.util.collections.CollectionHelper.isEmpty;
3637

3738
/**
3839
* @author Steve Ebersole
3940
*/
4041
public class XmlDocumentImpl implements XmlDocument {
42+
private final Origin origin;
43+
private final JaxbEntityMappingsImpl root;
4144
private final DefaultsImpl defaults;
4245
private final List<JaxbEntityImpl> entityMappings;
4346
private final List<JaxbMappedSuperclassImpl> mappedSuperclassMappings;
@@ -57,6 +60,8 @@ public class XmlDocumentImpl implements XmlDocument {
5760
private final Map<String, JaxbNamedStoredProcedureQueryImpl> namedStoredProcedureQueries;
5861

5962
private XmlDocumentImpl(
63+
Origin origin,
64+
JaxbEntityMappingsImpl root,
6065
DefaultsImpl defaults,
6166
List<JaxbEntityImpl> entityMappings,
6267
List<JaxbMappedSuperclassImpl> mappedSuperclassMappings,
@@ -74,6 +79,8 @@ private XmlDocumentImpl(
7479
Map<String, JaxbNamedStoredProcedureQueryImpl> namedStoredProcedureQueries,
7580
Map<String, JaxbHbmNamedQueryType> hibernateNamedQueries,
7681
Map<String, JaxbHbmNamedNativeQueryType> hibernateNamedNativeQueries) {
82+
this.origin = origin;
83+
this.root = root;
7784
this.defaults = defaults;
7885
this.entityMappings = entityMappings;
7986
this.mappedSuperclassMappings = mappedSuperclassMappings;
@@ -93,6 +100,16 @@ private XmlDocumentImpl(
93100
this.hibernateNamedNativeQueries = hibernateNamedNativeQueries;
94101
}
95102

103+
@Override
104+
public Origin getOrigin() {
105+
return origin;
106+
}
107+
108+
@Override
109+
public JaxbEntityMappingsImpl getRoot() {
110+
return root;
111+
}
112+
96113
@Override
97114
public Defaults getDefaults() {
98115
return defaults;
@@ -252,8 +269,11 @@ static DefaultsImpl consume(JaxbEntityMappingsImpl jaxbRoot, PersistenceUnitMeta
252269
}
253270
}
254271

255-
public static XmlDocumentImpl consume(JaxbEntityMappingsImpl jaxbRoot, PersistenceUnitMetadata metadata) {
272+
public static XmlDocumentImpl consume(Binding<JaxbEntityMappingsImpl> xmlBinding, PersistenceUnitMetadata metadata) {
273+
final JaxbEntityMappingsImpl jaxbRoot = xmlBinding.getRoot();
256274
return new XmlDocumentImpl(
275+
xmlBinding.getOrigin(),
276+
xmlBinding.getRoot(),
257277
DefaultsImpl.consume( jaxbRoot, metadata ),
258278
jaxbRoot.getEntities(),
259279
jaxbRoot.getMappedSuperclasses(),

hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlPreProcessingResultImpl.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import java.util.List;
99

1010
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
11+
import org.hibernate.boot.jaxb.spi.Binding;
1112
import org.hibernate.boot.models.xml.spi.PersistenceUnitMetadata;
13+
import org.hibernate.boot.models.xml.spi.XmlDocument;
1214
import org.hibernate.boot.models.xml.spi.XmlPreProcessingResult;
1315
import org.hibernate.internal.util.StringHelper;
1416

@@ -17,7 +19,7 @@
1719
*/
1820
public class XmlPreProcessingResultImpl implements XmlPreProcessingResult {
1921
private final PersistenceUnitMetadataImpl persistenceUnitMetadata;
20-
private final List<JaxbEntityMappingsImpl> documents = new ArrayList<>();
22+
private final List<XmlDocument> documents = new ArrayList<>();
2123
private final List<String> managedClasses = new ArrayList<>();
2224
private final List<String> managedNames = new ArrayList<>();
2325

@@ -36,13 +38,12 @@ public XmlPreProcessingResultImpl() {
3638
this( new PersistenceUnitMetadataImpl() );
3739
}
3840

39-
@Override
4041
public PersistenceUnitMetadataImpl getPersistenceUnitMetadata() {
4142
return persistenceUnitMetadata;
4243
}
4344

4445
@Override
45-
public List<JaxbEntityMappingsImpl> getDocuments() {
46+
public List<XmlDocument> getDocuments() {
4647
return documents;
4748
}
4849

@@ -56,23 +57,26 @@ public List<String> getMappedNames() {
5657
return managedNames;
5758
}
5859

59-
public void addDocument(JaxbEntityMappingsImpl document) {
60-
persistenceUnitMetadata.apply( document.getPersistenceUnitMetadata() );
61-
documents.add( document );
62-
document.getEmbeddables().forEach( (jaxbEmbeddable) -> {
60+
public void addDocument(Binding<JaxbEntityMappingsImpl> binding) {
61+
final XmlDocumentImpl xmlDocument = XmlDocumentImpl.consume( binding, persistenceUnitMetadata );
62+
documents.add( xmlDocument );
63+
64+
final JaxbEntityMappingsImpl jaxbRoot = binding.getRoot();
65+
persistenceUnitMetadata.apply( jaxbRoot.getPersistenceUnitMetadata() );
66+
jaxbRoot.getEmbeddables().forEach( (jaxbEmbeddable) -> {
6367
if ( StringHelper.isNotEmpty( jaxbEmbeddable.getClazz() ) ) {
64-
managedClasses.add( XmlProcessingHelper.determineClassName( document, jaxbEmbeddable ) );
68+
managedClasses.add( XmlProcessingHelper.determineClassName( jaxbRoot, jaxbEmbeddable ) );
6569
}
6670
else if ( StringHelper.isNotEmpty( jaxbEmbeddable.getName() ) ) {
6771
managedNames.add( jaxbEmbeddable.getName() );
6872
}
6973
} );
70-
document.getMappedSuperclasses().forEach( (jaxbMappedSuperclass) -> {
71-
managedClasses.add( XmlProcessingHelper.determineClassName( document, jaxbMappedSuperclass ) );
74+
jaxbRoot.getMappedSuperclasses().forEach( (jaxbMappedSuperclass) -> {
75+
managedClasses.add( XmlProcessingHelper.determineClassName( jaxbRoot, jaxbMappedSuperclass ) );
7276
} );
73-
document.getEntities().forEach( (jaxbEntity) -> {
77+
jaxbRoot.getEntities().forEach( (jaxbEntity) -> {
7478
if ( StringHelper.isNotEmpty( jaxbEntity.getClazz() ) ) {
75-
managedClasses.add( XmlProcessingHelper.determineClassName( document, jaxbEntity ) );
79+
managedClasses.add( XmlProcessingHelper.determineClassName( jaxbRoot, jaxbEntity ) );
7680
}
7781
else if ( StringHelper.isNotEmpty( jaxbEntity.getName() ) ) {
7882
managedNames.add( jaxbEntity.getName() );

hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/XmlProcessingResultImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.hibernate.boot.jaxb.mapping.spi.JaxbEmbeddableImpl;
1111
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityImpl;
1212
import org.hibernate.boot.jaxb.mapping.spi.JaxbMappedSuperclassImpl;
13-
import org.hibernate.boot.models.xml.spi.PersistenceUnitMetadata;
1413
import org.hibernate.boot.models.xml.spi.XmlProcessingResult;
1514

1615
/**
@@ -34,7 +33,7 @@ public void addEmbeddableOverride(OverrideTuple<JaxbEmbeddableImpl> overrideTupl
3433
}
3534

3635
@Override
37-
public void apply(PersistenceUnitMetadata metadata) {
36+
public void apply() {
3837
ManagedTypeProcessor.processOverrideEmbeddable( getEmbeddableOverrides() );
3938

4039
ManagedTypeProcessor.processOverrideMappedSuperclass( getMappedSuperclassesOverrides() );

hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/attr/ElementCollectionAttributeProcessing.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.hibernate.boot.models.annotations.internal.CollectionTableJpaAnnotation;
1212
import org.hibernate.boot.models.annotations.internal.ElementCollectionJpaAnnotation;
1313
import org.hibernate.boot.models.annotations.internal.TargetXmlAnnotation;
14+
import org.hibernate.boot.models.xml.internal.SimpleTypeInterpretation;
1415
import org.hibernate.boot.models.xml.internal.XmlAnnotationHelper;
1516
import org.hibernate.boot.models.xml.internal.XmlProcessingHelper;
1617
import org.hibernate.boot.models.xml.spi.XmlDocumentContext;
@@ -53,7 +54,7 @@ public static MutableMemberDetails processElementCollectionAttribute(
5354
elementCollectionUsage.fetch( jaxbElementCollection.getFetch() );
5455
}
5556

56-
applyTarget( jaxbElementCollection, xmlDocumentContext, memberDetails );
57+
applyElementCollectionElementType( jaxbElementCollection, elementCollectionUsage, memberDetails, xmlDocumentContext );
5758

5859
// NOTE: it is important that this happens before the `CommonPluralAttributeProcessing#applyPluralAttributeStructure`
5960
// call below
@@ -91,6 +92,22 @@ public static MutableMemberDetails processElementCollectionAttribute(
9192
return memberDetails;
9293
}
9394

95+
private static void applyElementCollectionElementType(
96+
JaxbElementCollectionImpl jaxbElementCollection,
97+
ElementCollectionJpaAnnotation elementCollectionUsage,
98+
MutableMemberDetails memberDetails,
99+
XmlDocumentContext xmlDocumentContext) {
100+
if ( StringHelper.isNotEmpty( jaxbElementCollection.getTargetClass() ) ) {
101+
final SimpleTypeInterpretation simpleTypeInterpretation = SimpleTypeInterpretation.interpret( jaxbElementCollection.getTargetClass() );
102+
if ( simpleTypeInterpretation != null ) {
103+
elementCollectionUsage.targetClass( simpleTypeInterpretation.getJavaType() );
104+
return;
105+
}
106+
}
107+
108+
applyTarget( jaxbElementCollection, xmlDocumentContext, memberDetails );
109+
}
110+
94111
private static void applyTarget(
95112
JaxbElementCollectionImpl jaxbElementCollection,
96113
XmlDocumentContext xmlDocumentContext,

hibernate-core/src/main/java/org/hibernate/boot/models/xml/spi/XmlDocument.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
*/
55
package org.hibernate.boot.models.xml.spi;
66

7-
import java.util.List;
8-
import java.util.Map;
9-
7+
import jakarta.persistence.AccessType;
8+
import org.hibernate.boot.jaxb.Origin;
109
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmNamedNativeQueryType;
1110
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmNamedQueryType;
1211
import org.hibernate.boot.jaxb.mapping.spi.JaxbCollectionUserTypeRegistrationImpl;
@@ -16,20 +15,26 @@
1615
import org.hibernate.boot.jaxb.mapping.spi.JaxbEmbeddableImpl;
1716
import org.hibernate.boot.jaxb.mapping.spi.JaxbEmbeddableInstantiatorRegistrationImpl;
1817
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityImpl;
18+
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
1919
import org.hibernate.boot.jaxb.mapping.spi.JaxbJavaTypeRegistrationImpl;
2020
import org.hibernate.boot.jaxb.mapping.spi.JaxbJdbcTypeRegistrationImpl;
2121
import org.hibernate.boot.jaxb.mapping.spi.JaxbMappedSuperclassImpl;
22-
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedNativeQueryImpl;
2322
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedHqlQueryImpl;
23+
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedNativeQueryImpl;
2424
import org.hibernate.boot.jaxb.mapping.spi.JaxbNamedStoredProcedureQueryImpl;
2525
import org.hibernate.boot.jaxb.mapping.spi.JaxbUserTypeRegistrationImpl;
2626

27-
import jakarta.persistence.AccessType;
27+
import java.util.List;
28+
import java.util.Map;
2829

2930
/**
3031
* @author Steve Ebersole
3132
*/
3233
public interface XmlDocument {
34+
Origin getOrigin();
35+
36+
JaxbEntityMappingsImpl getRoot();
37+
3338
List<JaxbEntityImpl> getEntityMappings();
3439

3540
List<JaxbMappedSuperclassImpl> getMappedSuperclassMappings();

0 commit comments

Comments
 (0)