mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-16 08:05:05 +00:00
HHH-18520 Upgrade to hibernate-models 0.9.0 + HHH-18521 Leverage hibernate-models ModelsConfiguration
This commit is contained in:
parent
6e2ed7f1a0
commit
3c1b5c7a1d
@ -28,6 +28,7 @@ dependencies {
|
||||
api jakartaLibs.jta
|
||||
|
||||
implementation libs.hibernateModels
|
||||
implementation libs.hibernateModelsJandex
|
||||
implementation libs.jandex
|
||||
implementation libs.classmate
|
||||
implementation libs.byteBuddy
|
||||
@ -65,6 +66,7 @@ dependencies {
|
||||
}
|
||||
testImplementation "joda-time:joda-time:2.3"
|
||||
testImplementation dbLibs.h2
|
||||
testImplementation libs.hibernateModelsJandex
|
||||
|
||||
testRuntimeOnly libs.byteBuddy
|
||||
testRuntimeOnly testLibs.weld
|
||||
|
@ -105,8 +105,8 @@
|
||||
import org.hibernate.metamodel.CollectionClassification;
|
||||
import org.hibernate.metamodel.mapping.DiscriminatorType;
|
||||
import org.hibernate.metamodel.spi.EmbeddableInstantiator;
|
||||
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.ModelsConfiguration;
|
||||
import org.hibernate.models.spi.SourceModelBuildingContext;
|
||||
import org.hibernate.query.named.NamedObjectRepository;
|
||||
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
|
||||
@ -228,11 +228,13 @@ public InFlightMetadataCollectorImpl(
|
||||
private static SourceModelBuildingContext createModelBuildingContext(BootstrapContext bootstrapContext) {
|
||||
final ClassLoaderService classLoaderService = bootstrapContext.getServiceRegistry().getService( ClassLoaderService.class );
|
||||
final ClassLoaderServiceLoading classLoading = new ClassLoaderServiceLoading( classLoaderService );
|
||||
return new SourceModelBuildingContextImpl(
|
||||
classLoading,
|
||||
bootstrapContext.getJandexView(),
|
||||
ModelsHelper::preFillRegistries
|
||||
);
|
||||
|
||||
final ModelsConfiguration modelsConfiguration = new ModelsConfiguration();
|
||||
modelsConfiguration.setClassLoading(classLoading);
|
||||
// modelsConfiguration.setExplicitContextProvider( );
|
||||
modelsConfiguration.configValue( "hibernate.models.jandex.index", bootstrapContext.getJandexView() );
|
||||
modelsConfiguration.setRegistryPrimer( ModelsHelper::preFillRegistries );
|
||||
return modelsConfiguration.bootstrap();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -87,10 +87,8 @@ public TypeDetails getPropertyType() throws MappingException {
|
||||
if ( targetAnnotation != null ) {
|
||||
final String targetName = targetAnnotation.value();
|
||||
final SourceModelBuildingContext sourceModelBuildingContext = sourceModelContext;
|
||||
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry().resolveClassDetails(
|
||||
targetName,
|
||||
name -> new DynamicClassDetails( targetName, sourceModelBuildingContext )
|
||||
);
|
||||
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry()
|
||||
.resolveClassDetails( targetName );
|
||||
return new ClassTypeDetailsImpl( classDetails, TypeDetails.Kind.CLASS );
|
||||
}
|
||||
|
||||
@ -119,10 +117,8 @@ public TypeDetails getClassOrElementType() throws MappingException {
|
||||
final org.hibernate.boot.internal.Target annotationUsage = propertyMember.getDirectAnnotationUsage( org.hibernate.boot.internal.Target.class );
|
||||
if ( annotationUsage != null ) {
|
||||
final String targetName = annotationUsage.value();
|
||||
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry().resolveClassDetails(
|
||||
targetName,
|
||||
name -> new DynamicClassDetails( targetName, sourceModelBuildingContext )
|
||||
);
|
||||
final ClassDetails classDetails = sourceModelBuildingContext.getClassDetailsRegistry()
|
||||
.resolveClassDetails( targetName );
|
||||
return new ClassTypeDetailsImpl( classDetails, TypeDetails.Kind.CLASS );
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,8 @@
|
||||
import org.hibernate.engine.config.spi.StandardConverters;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||
import org.hibernate.mapping.Table;
|
||||
import org.hibernate.models.internal.jandex.JandexIndexerHelper;
|
||||
import org.hibernate.models.internal.MutableClassDetailsRegistry;
|
||||
import org.hibernate.models.jandex.internal.JandexIndexerHelper;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.ClassDetailsRegistry;
|
||||
import org.hibernate.models.spi.ClassLoading;
|
||||
@ -458,7 +459,7 @@ public static DomainModelSource processManagedResources(
|
||||
xmlProcessingResult.apply( xmlPreProcessingResult.getPersistenceUnitMetadata() );
|
||||
|
||||
return new DomainModelSource(
|
||||
classDetailsRegistry.makeImmutableCopy(),
|
||||
classDetailsRegistry,
|
||||
jandexIndex,
|
||||
allKnownClassNames,
|
||||
modelCategorizationCollector.getGlobalRegistrations(),
|
||||
@ -516,40 +517,6 @@ public static IndexView resolveJandexIndex(
|
||||
|
||||
return CompositeIndex.create( suppliedJandexIndex, jandexIndexer.complete() );
|
||||
}
|
||||
//
|
||||
// public static void preFillRegistries(RegistryPrimer.Contributions contributions, SourceModelBuildingContext buildingContext) {
|
||||
// OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation );
|
||||
//
|
||||
// final IndexView jandexIndex = buildingContext.getJandexIndex();
|
||||
// if ( jandexIndex == null ) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
|
||||
// final AnnotationDescriptorRegistry annotationDescriptorRegistry = buildingContext.getAnnotationDescriptorRegistry();
|
||||
//
|
||||
// for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) {
|
||||
// final String className = knownClass.name().toString();
|
||||
//
|
||||
// if ( knownClass.isAnnotation() ) {
|
||||
// // it is always safe to load the annotation classes - we will never be enhancing them
|
||||
// //noinspection rawtypes
|
||||
// final Class annotationClass = buildingContext
|
||||
// .getClassLoading()
|
||||
// .classForName( className );
|
||||
// //noinspection unchecked
|
||||
// annotationDescriptorRegistry.resolveDescriptor(
|
||||
// annotationClass,
|
||||
// (t) -> JdkBuilders.buildAnnotationDescriptor( annotationClass, buildingContext )
|
||||
// );
|
||||
// }
|
||||
//
|
||||
// classDetailsRegistry.resolveClassDetails(
|
||||
// className,
|
||||
// (name) -> new JandexClassDetails( knownClass, buildingContext )
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
private static void processAdditionalMappingContributions(
|
||||
InFlightMetadataCollectorImpl metadataCollector,
|
||||
@ -628,6 +595,7 @@ public void contributeManagedClass(ClassDetails classDetails) {
|
||||
additionalClassDetails.add( classDetails );
|
||||
metadataCollector.getSourceModelBuildingContext()
|
||||
.getClassDetailsRegistry()
|
||||
.as( MutableClassDetailsRegistry.class )
|
||||
.addClassDetails( classDetails.getName(), classDetails );
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,12 @@
|
||||
package org.hibernate.boot.models.categorize.internal;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.Set;
|
||||
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.models.spi.ClassLoading;
|
||||
@ -37,4 +43,9 @@ public Package packageForName(String name) {
|
||||
public URL locateResource(String resourceName) {
|
||||
return classLoaderService.locateResource( resourceName );
|
||||
}
|
||||
|
||||
@Override
|
||||
public <S> Collection<S> loadJavaServices(Class<S> serviceType) {
|
||||
return classLoaderService.loadJavaServices( serviceType );
|
||||
}
|
||||
}
|
||||
|
@ -31,8 +31,8 @@
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
|
||||
import org.hibernate.boot.spi.BootstrapContext;
|
||||
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
|
||||
import org.hibernate.models.internal.jandex.JandexIndexerHelper;
|
||||
import org.hibernate.models.internal.BasicModelBuildingContextImpl;
|
||||
import org.hibernate.models.jandex.internal.JandexIndexerHelper;
|
||||
import org.hibernate.models.spi.AnnotationDescriptorRegistry;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.ClassDetailsRegistry;
|
||||
@ -103,9 +103,8 @@ public static CategorizedDomainModel processManagedResources(
|
||||
// At this point we know all managed class names across all sources.
|
||||
// Resolve the Jandex Index and build the SourceModelBuildingContext.
|
||||
final IndexView jandexIndex = resolveJandexIndex( allKnownClassNames, bootstrapContext.getJandexView(), classLoading );
|
||||
final SourceModelBuildingContextImpl sourceModelBuildingContext = new SourceModelBuildingContextImpl(
|
||||
final BasicModelBuildingContextImpl sourceModelBuildingContext = new BasicModelBuildingContextImpl(
|
||||
classLoading,
|
||||
jandexIndex,
|
||||
ModelsHelper::preFillRegistries
|
||||
);
|
||||
|
||||
@ -174,16 +173,11 @@ public static CategorizedDomainModel processManagedResources(
|
||||
// OUTPUTS:
|
||||
// - CategorizedDomainModel
|
||||
|
||||
final ClassDetailsRegistry classDetailsRegistryImmutable = classDetailsRegistry
|
||||
.makeImmutableCopy();
|
||||
|
||||
final AnnotationDescriptorRegistry annotationDescriptorRegistryImmutable = descriptorRegistry
|
||||
.makeImmutableCopy();
|
||||
|
||||
// Collect the entity hierarchies based on the set of `rootEntities`
|
||||
final ModelCategorizationContextImpl mappingBuildingContext = new ModelCategorizationContextImpl(
|
||||
classDetailsRegistryImmutable,
|
||||
annotationDescriptorRegistryImmutable,
|
||||
classDetailsRegistry,
|
||||
descriptorRegistry,
|
||||
globalRegistrations
|
||||
);
|
||||
|
||||
@ -212,8 +206,8 @@ public static CategorizedDomainModel processManagedResources(
|
||||
return modelCategorizationCollector.createResult(
|
||||
entityHierarchies,
|
||||
xmlPreProcessingResult.getPersistenceUnitMetadata(),
|
||||
classDetailsRegistryImmutable,
|
||||
annotationDescriptorRegistryImmutable
|
||||
classDetailsRegistry,
|
||||
descriptorRegistry
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -7,8 +7,8 @@
|
||||
package org.hibernate.boot.models.internal;
|
||||
|
||||
import org.hibernate.annotations.TenantId;
|
||||
import org.hibernate.models.internal.jandex.JandexClassDetails;
|
||||
import org.hibernate.models.internal.jdk.JdkBuilders;
|
||||
import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
|
||||
import org.hibernate.models.spi.AnnotationDescriptorRegistry;
|
||||
import org.hibernate.models.spi.ClassDetailsRegistry;
|
||||
import org.hibernate.models.spi.RegistryPrimer;
|
||||
@ -26,7 +26,8 @@ public static void preFillRegistries(RegistryPrimer.Contributions contributions,
|
||||
|
||||
buildingContext.getAnnotationDescriptorRegistry().getDescriptor( TenantId.class );
|
||||
|
||||
final IndexView jandexIndex = buildingContext.getJandexIndex();
|
||||
if ( buildingContext instanceof JandexModelBuildingContext ) {
|
||||
final IndexView jandexIndex = buildingContext.as( JandexModelBuildingContext.class ).getJandexIndex();
|
||||
if ( jandexIndex == null ) {
|
||||
return;
|
||||
}
|
||||
@ -50,10 +51,8 @@ public static void preFillRegistries(RegistryPrimer.Contributions contributions,
|
||||
);
|
||||
}
|
||||
|
||||
classDetailsRegistry.resolveClassDetails(
|
||||
className,
|
||||
(name) -> new JandexClassDetails( knownClass, buildingContext )
|
||||
);
|
||||
classDetailsRegistry.resolveClassDetails( className );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.hibernate.boot.models.DialectOverrideAnnotations;
|
||||
@ -23,13 +22,13 @@
|
||||
import org.hibernate.boot.models.JpaAnnotations;
|
||||
import org.hibernate.boot.models.XmlAnnotations;
|
||||
import org.hibernate.models.AnnotationAccessException;
|
||||
import org.hibernate.models.jandex.spi.JandexModelBuildingContext;
|
||||
import org.hibernate.models.jandex.spi.JandexValueExtractor;
|
||||
import org.hibernate.models.spi.AnnotationDescriptor;
|
||||
import org.hibernate.models.spi.AttributeDescriptor;
|
||||
import org.hibernate.models.spi.JandexValueExtractor;
|
||||
import org.hibernate.models.spi.SourceModelBuildingContext;
|
||||
|
||||
import org.jboss.jandex.AnnotationInstance;
|
||||
import org.jboss.jandex.AnnotationValue;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
@ -76,7 +75,8 @@ public static <V, A extends Annotation> V extractJdkValue(A jdkAnnotation, Annot
|
||||
}
|
||||
|
||||
public static <V> V extractJandexValue(AnnotationInstance jandexAnnotation, AttributeDescriptor<V> attributeDescriptor, SourceModelBuildingContext modelContext) {
|
||||
final JandexValueExtractor<V> extractor = attributeDescriptor.getTypeDescriptor().createJandexValueExtractor( modelContext );
|
||||
final JandexValueExtractor<V> extractor = modelContext.as( JandexModelBuildingContext.class )
|
||||
.getJandexValueExtractor( attributeDescriptor.getTypeDescriptor() );
|
||||
return extractor.extractValue( jandexAnnotation, attributeDescriptor, modelContext );
|
||||
// final AnnotationValue value = jandexAnnotation.value( attributeDescriptor.getName() );
|
||||
// return attributeDescriptor
|
||||
|
@ -44,9 +44,10 @@
|
||||
import org.hibernate.models.internal.ClassTypeDetailsImpl;
|
||||
import org.hibernate.models.internal.ModelsClassLogging;
|
||||
import org.hibernate.models.internal.ModifierUtils;
|
||||
import org.hibernate.models.internal.RenderingCollectorImpl;
|
||||
import org.hibernate.models.internal.dynamic.DynamicClassDetails;
|
||||
import org.hibernate.models.internal.dynamic.DynamicFieldDetails;
|
||||
import org.hibernate.models.rendering.internal.RenderingTargetCollectingImpl;
|
||||
import org.hibernate.models.rendering.internal.SimpleRenderer;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.ClassDetailsRegistry;
|
||||
import org.hibernate.models.spi.FieldDetails;
|
||||
@ -99,17 +100,7 @@ public static void processCompleteEntity(
|
||||
|
||||
memberAdjuster = ManagedTypeProcessor::adjustDynamicTypeMember;
|
||||
classAccessType = AccessType.FIELD;
|
||||
classDetails = (MutableClassDetails) classDetailsRegistry.resolveClassDetails(
|
||||
jaxbEntity.getName(),
|
||||
(name) -> new DynamicClassDetails(
|
||||
jaxbEntity.getName(),
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
null,
|
||||
xmlDocumentContext.getModelBuildingContext()
|
||||
)
|
||||
);
|
||||
classDetails = (MutableClassDetails) classDetailsRegistry.resolveClassDetails( jaxbEntity.getName() );
|
||||
|
||||
prepareDynamicClass( classDetails, jaxbEntity, xmlDocumentContext );
|
||||
}
|
||||
@ -625,9 +616,10 @@ private static void renderClass(MutableClassDetails classDetails, XmlDocumentCon
|
||||
return;
|
||||
}
|
||||
|
||||
final RenderingCollectorImpl renderingCollector = new RenderingCollectorImpl();
|
||||
classDetails.render( renderingCollector, xmlDocumentContext.getModelBuildingContext() );
|
||||
XML_PROCESS_LOGGER.debugf( "Class annotations from XML for %s:\n%s", classDetails.getName(), renderingCollector.toString() );
|
||||
final RenderingTargetCollectingImpl collectingTarget = new RenderingTargetCollectingImpl();
|
||||
final SimpleRenderer renderer = new SimpleRenderer( collectingTarget );
|
||||
renderer.renderClass( classDetails, xmlDocumentContext.getModelBuildingContext() );
|
||||
XML_PROCESS_LOGGER.debugf( "Class annotations from XML for %s:\n%s", classDetails.getName(), renderer.toString() );
|
||||
}
|
||||
|
||||
private static void applyAccessAnnotation(
|
||||
@ -943,7 +935,7 @@ public static void processCompleteEmbeddable(
|
||||
}
|
||||
// no class == dynamic...
|
||||
classDetails = (MutableClassDetails) classDetailsRegistry
|
||||
.resolveClassDetails( jaxbEmbeddable.getName(), DynamicClassDetails::new );
|
||||
.resolveClassDetails( jaxbEmbeddable.getName() );
|
||||
classAccessType = AccessType.FIELD;
|
||||
memberAdjuster = ManagedTypeProcessor::adjustDynamicTypeMember;
|
||||
|
||||
|
@ -137,10 +137,8 @@ else if ( jdbcTypeCode != null ) {
|
||||
// <embedded/>, <embedded-id/>
|
||||
final String target = jaxbEmbeddedMapping.getTarget();
|
||||
if ( isNotEmpty( target ) ) {
|
||||
return (MutableClassDetails) getModelBuildingContext().getClassDetailsRegistry().resolveClassDetails(
|
||||
target,
|
||||
(name) -> new DynamicClassDetails( target, getModelBuildingContext() )
|
||||
);
|
||||
return (MutableClassDetails) getModelBuildingContext().getClassDetailsRegistry()
|
||||
.resolveClassDetails( target );
|
||||
}
|
||||
// fall through to exception
|
||||
}
|
||||
@ -148,17 +146,8 @@ else if ( jdbcTypeCode != null ) {
|
||||
if ( jaxbPersistentAttribute instanceof JaxbAssociationAttribute jaxbAssociationAttribute ) {
|
||||
final String target = jaxbAssociationAttribute.getTargetEntity();
|
||||
if ( isNotEmpty( target ) ) {
|
||||
return (MutableClassDetails) getModelBuildingContext().getClassDetailsRegistry().resolveClassDetails(
|
||||
target,
|
||||
(name) -> new DynamicClassDetails(
|
||||
target,
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
null,
|
||||
getModelBuildingContext()
|
||||
)
|
||||
);
|
||||
return (MutableClassDetails) getModelBuildingContext().getClassDetailsRegistry()
|
||||
.resolveClassDetails( target );
|
||||
}
|
||||
// fall through to exception
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
import org.hibernate.boot.models.xml.spi.XmlProcessor;
|
||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||
import org.hibernate.boot.spi.BootstrapContext;
|
||||
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
|
||||
import org.hibernate.models.internal.BasicModelBuildingContextImpl;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.FieldDetails;
|
||||
import org.hibernate.models.spi.MemberDetails;
|
||||
@ -91,9 +91,8 @@ protected ClassDetails getClassDetails(Class<?> entityClass, String xmlResourceN
|
||||
persistenceUnitMetadata
|
||||
);
|
||||
|
||||
final SourceModelBuildingContext modelBuildingContext = new SourceModelBuildingContextImpl(
|
||||
final SourceModelBuildingContext modelBuildingContext = new BasicModelBuildingContextImpl(
|
||||
SIMPLE_CLASS_LOADING,
|
||||
null,
|
||||
(contributions, inFlightContext) -> {
|
||||
OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation );
|
||||
}
|
||||
|
@ -52,17 +52,15 @@
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.cfg.MappingSettings;
|
||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||
import org.hibernate.models.internal.AnnotationDescriptorRegistryStandard;
|
||||
import org.hibernate.models.internal.BaseLineJavaTypes;
|
||||
import org.hibernate.models.internal.SourceModelBuildingContextImpl;
|
||||
import org.hibernate.models.internal.jandex.JandexBuilders;
|
||||
import org.hibernate.models.internal.jandex.JandexIndexerHelper;
|
||||
import org.hibernate.models.internal.BasicModelBuildingContextImpl;
|
||||
import org.hibernate.models.internal.jdk.JdkBuilders;
|
||||
import org.hibernate.models.jandex.internal.JandexIndexerHelper;
|
||||
import org.hibernate.models.jandex.internal.JandexModelBuildingContextImpl;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.ClassDetailsRegistry;
|
||||
import org.hibernate.models.spi.ClassLoading;
|
||||
import org.hibernate.models.spi.SourceModelBuildingContext;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
|
||||
import org.jboss.jandex.ClassInfo;
|
||||
import org.jboss.jandex.Index;
|
||||
@ -87,49 +85,50 @@ public static SourceModelBuildingContext createBuildingContext(ClassLoading clas
|
||||
return createBuildingContext( jandexIndex, modelClasses );
|
||||
}
|
||||
|
||||
public static SourceModelBuildingContextImpl createBuildingContext(Index jandexIndex, Class<?>... modelClasses) {
|
||||
public static SourceModelBuildingContext createBuildingContext(Index jandexIndex, Class<?>... modelClasses) {
|
||||
return createBuildingContext( jandexIndex, SIMPLE_CLASS_LOADING, modelClasses );
|
||||
}
|
||||
|
||||
public static SourceModelBuildingContextImpl createBuildingContext(
|
||||
public static SourceModelBuildingContext createBuildingContext(
|
||||
Index jandexIndex,
|
||||
ClassLoading classLoadingAccess,
|
||||
Class<?>... modelClasses) {
|
||||
final SourceModelBuildingContextImpl buildingContext = new SourceModelBuildingContextImpl(
|
||||
final SourceModelBuildingContext ctx;
|
||||
|
||||
if ( jandexIndex == null ) {
|
||||
ctx = new BasicModelBuildingContextImpl(
|
||||
classLoadingAccess,
|
||||
jandexIndex,
|
||||
(contributions, buildingContext1) -> OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation )
|
||||
);
|
||||
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getClassDetailsRegistry();
|
||||
final AnnotationDescriptorRegistryStandard annotationDescriptorRegistry = (AnnotationDescriptorRegistryStandard) buildingContext.getAnnotationDescriptorRegistry();
|
||||
|
||||
for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) {
|
||||
// if ( knownClass.simpleName().endsWith( "package-info" ) ) {
|
||||
// new PackageDetailsImpl( knownClass, buildingContext );
|
||||
// continue;
|
||||
// }
|
||||
|
||||
classDetailsRegistry.resolveClassDetails(
|
||||
knownClass.name().toString(),
|
||||
JandexBuilders.DEFAULT_BUILDER
|
||||
}
|
||||
else {
|
||||
ctx = new JandexModelBuildingContextImpl(
|
||||
jandexIndex,
|
||||
classLoadingAccess,
|
||||
(contributions, buildingContext1) -> OrmAnnotationHelper.forEachOrmAnnotation( contributions::registerAnnotation )
|
||||
);
|
||||
|
||||
for ( ClassInfo knownClass : jandexIndex.getKnownClasses() ) {
|
||||
ctx.getClassDetailsRegistry().resolveClassDetails( knownClass.name().toString() );
|
||||
|
||||
if ( knownClass.isAnnotation() ) {
|
||||
final Class<? extends Annotation> annotationClass = buildingContext
|
||||
.getClassLoading()
|
||||
.classForName( knownClass.name().toString() );
|
||||
annotationDescriptorRegistry.resolveDescriptor( annotationClass, annotationType -> JdkBuilders.buildAnnotationDescriptor(
|
||||
final Class<? extends Annotation> annotationClass = classLoadingAccess.classForName( knownClass.name().toString() );
|
||||
ctx.getAnnotationDescriptorRegistry().resolveDescriptor(
|
||||
annotationClass,
|
||||
annotationType -> JdkBuilders.buildAnnotationDescriptor(
|
||||
annotationType,
|
||||
buildingContext
|
||||
) );
|
||||
ctx
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( int i = 0; i < modelClasses.length; i++ ) {
|
||||
classDetailsRegistry.resolveClassDetails( modelClasses[i].getName() );
|
||||
ctx.getClassDetailsRegistry().resolveClassDetails( modelClasses[i].getName() );
|
||||
}
|
||||
|
||||
return buildingContext;
|
||||
return ctx;
|
||||
}
|
||||
|
||||
public static Index buildJandexIndex(Class<?>... modelClasses) {
|
||||
@ -275,11 +274,21 @@ public static SourceModelBuildingContext createBuildingContext(
|
||||
? buildJandexIndex( classLoading, allKnownClassNames )
|
||||
: null;
|
||||
|
||||
final SourceModelBuildingContextImpl sourceModelBuildingContext = new SourceModelBuildingContextImpl(
|
||||
final SourceModelBuildingContext sourceModelBuildingContext;
|
||||
|
||||
if ( jandexIndex == null ) {
|
||||
sourceModelBuildingContext = new BasicModelBuildingContextImpl(
|
||||
classLoading,
|
||||
jandexIndex,
|
||||
ModelsHelper::preFillRegistries
|
||||
);
|
||||
}
|
||||
else {
|
||||
sourceModelBuildingContext = new JandexModelBuildingContextImpl(
|
||||
jandexIndex,
|
||||
classLoading,
|
||||
ModelsHelper::preFillRegistries
|
||||
);
|
||||
}
|
||||
|
||||
final RootMappingDefaults rootMappingDefaults = new RootMappingDefaults(
|
||||
metadataBuildingOptions.getMappingDefaults(),
|
||||
|
@ -7,7 +7,7 @@
|
||||
package org.hibernate.orm.test.boot.models;
|
||||
|
||||
import org.hibernate.models.AnnotationAccessException;
|
||||
import org.hibernate.models.internal.jandex.JandexClassDetails;
|
||||
import org.hibernate.models.jandex.internal.JandexClassDetails;
|
||||
import org.hibernate.models.spi.AnnotationDescriptor;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.FieldDetails;
|
||||
|
@ -11,20 +11,13 @@
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.boot.ResourceStreamLocator;
|
||||
import org.hibernate.boot.models.HibernateAnnotations;
|
||||
import org.hibernate.boot.models.JpaAnnotations;
|
||||
import org.hibernate.boot.models.annotations.internal.EntityJpaAnnotation;
|
||||
import org.hibernate.boot.spi.AdditionalMappingContributions;
|
||||
import org.hibernate.boot.spi.AdditionalMappingContributor;
|
||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||
import org.hibernate.mapping.PersistentClass;
|
||||
import org.hibernate.models.internal.dynamic.DynamicClassDetails;
|
||||
import org.hibernate.models.internal.dynamic.DynamicFieldDetails;
|
||||
import org.hibernate.models.internal.jdk.JdkClassDetails;
|
||||
import org.hibernate.models.spi.ClassDetails;
|
||||
import org.hibernate.models.spi.ClassDetailsRegistry;
|
||||
import org.hibernate.models.spi.MutableMemberDetails;
|
||||
|
||||
import org.hibernate.testing.orm.junit.BootstrapServiceRegistry;
|
||||
import org.hibernate.testing.orm.junit.BootstrapServiceRegistry.JavaService;
|
||||
@ -43,7 +36,6 @@
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*
|
||||
* @implNote hibernate-envers is already a full testing of contributing a {@code hbm.xml}
|
||||
* document; so we skip that here until if/when we transition it to use a better approach
|
||||
*/
|
||||
@ -105,13 +97,17 @@ void verifyOrmXmlContribution(DomainModelScope domainModelScope, SessionFactoryS
|
||||
@DomainModel
|
||||
@SessionFactory
|
||||
@SuppressWarnings("JUnitMalformedDeclaration")
|
||||
void verifyJdkClassDetailsContributions(DomainModelScope domainModelScope, SessionFactoryScope sessionFactoryScope) {
|
||||
final PersistentClass entity4Binding = domainModelScope.getDomainModel().getEntityBinding( Entity4.class.getName() );
|
||||
void verifyJdkClassDetailsContributions(
|
||||
DomainModelScope domainModelScope,
|
||||
SessionFactoryScope sessionFactoryScope) {
|
||||
final PersistentClass entity4Binding = domainModelScope.getDomainModel()
|
||||
.getEntityBinding( Entity4.class.getName() );
|
||||
assertThat( entity4Binding ).isNotNull();
|
||||
assertThat( entity4Binding.getIdentifierProperty() ).isNotNull();
|
||||
assertThat( entity4Binding.getProperties() ).hasSize( 1 );
|
||||
|
||||
final PersistentClass entity5Binding = domainModelScope.getDomainModel().getEntityBinding( Entity5.class.getName() );
|
||||
final PersistentClass entity5Binding = domainModelScope.getDomainModel()
|
||||
.getEntityBinding( Entity5.class.getName() );
|
||||
assertThat( entity5Binding ).isNotNull();
|
||||
assertThat( entity5Binding.getIdentifierProperty() ).isNotNull();
|
||||
assertThat( entity5Binding.getProperties() ).hasSize( 1 );
|
||||
@ -137,7 +133,9 @@ void verifyJdkClassDetailsContributions(DomainModelScope domainModelScope, Sessi
|
||||
@DomainModel
|
||||
@SessionFactory
|
||||
@SuppressWarnings("JUnitMalformedDeclaration")
|
||||
void verifyDynamicClassDetailsContributions(DomainModelScope domainModelScope, SessionFactoryScope sessionFactoryScope) {
|
||||
void verifyDynamicClassDetailsContributions(
|
||||
DomainModelScope domainModelScope,
|
||||
SessionFactoryScope sessionFactoryScope) {
|
||||
final PersistentClass entity6Binding = domainModelScope.getDomainModel().getEntityBinding( "Entity6" );
|
||||
assertThat( entity6Binding ).isNotNull();
|
||||
assertThat( entity6Binding.getIdentifierProperty() ).isNotNull();
|
||||
@ -150,8 +148,8 @@ void verifyDynamicClassDetailsContributions(DomainModelScope domainModelScope, S
|
||||
} );
|
||||
}
|
||||
|
||||
@Entity( name = "Entity1" )
|
||||
@Table( name = "Entity1" )
|
||||
@Entity(name = "Entity1")
|
||||
@Table(name = "Entity1")
|
||||
public static class Entity1 {
|
||||
@Id
|
||||
private Integer id;
|
||||
@ -182,8 +180,8 @@ public void setName(String name) {
|
||||
}
|
||||
|
||||
|
||||
@Entity( name = "Entity2" )
|
||||
@Table( name = "Entity2" )
|
||||
@Entity(name = "Entity2")
|
||||
@Table(name = "Entity2")
|
||||
public static class Entity2 {
|
||||
@Id
|
||||
private Integer id;
|
||||
@ -213,8 +211,8 @@ public void setName(String name) {
|
||||
}
|
||||
}
|
||||
|
||||
@Entity( name = "Entity3" )
|
||||
@Table( name = "Entity3" )
|
||||
@Entity(name = "Entity3")
|
||||
@Table(name = "Entity3")
|
||||
public static class Entity3 {
|
||||
@Id
|
||||
private Integer id;
|
||||
@ -245,8 +243,8 @@ public void setName(String name) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Entity(name="Entity4")
|
||||
@Table(name="Entity4")
|
||||
@Entity(name = "Entity4")
|
||||
@Table(name = "Entity4")
|
||||
public static class Entity4 {
|
||||
@Id
|
||||
private Integer id;
|
||||
@ -277,7 +275,8 @@ public void contribute(
|
||||
InFlightMetadataCollector metadata,
|
||||
ResourceStreamLocator resourceStreamLocator,
|
||||
MetadataBuildingContext buildingContext) {
|
||||
try ( final InputStream stream = resourceStreamLocator.locateResourceStream( "mappings/intg/contributed-mapping.xml" ) ) {
|
||||
try (final InputStream stream = resourceStreamLocator.locateResourceStream(
|
||||
"mappings/intg/contributed-mapping.xml" )) {
|
||||
contributions.contributeBinding( stream );
|
||||
}
|
||||
catch (IOException e) {
|
||||
@ -297,50 +296,24 @@ public void contribute(
|
||||
.getSourceModelBuildingContext()
|
||||
.getClassDetailsRegistry();
|
||||
|
||||
contributeEntity4Details( contributions, buildingContext, classDetailsRegistry );
|
||||
contributeEntity5Details( contributions, buildingContext, classDetailsRegistry );
|
||||
contributeEntity4Details( contributions, classDetailsRegistry );
|
||||
contributeEntity5Details( contributions, classDetailsRegistry );
|
||||
}
|
||||
|
||||
private static void contributeEntity4Details(
|
||||
AdditionalMappingContributions contributions,
|
||||
MetadataBuildingContext buildingContext,
|
||||
ClassDetailsRegistry classDetailsRegistry) {
|
||||
final ClassDetails entity4Details = classDetailsRegistry.resolveClassDetails(
|
||||
Entity4.class.getName(),
|
||||
(name, modelBuildingContext) -> {
|
||||
assertThat( name ).isEqualTo( Entity4.class.getName() );
|
||||
assertThat( modelBuildingContext ).isSameAs( buildingContext.getMetadataCollector().getSourceModelBuildingContext() );
|
||||
return new JdkClassDetails( Entity4.class, modelBuildingContext );
|
||||
}
|
||||
Entity4.class.getName()
|
||||
);
|
||||
contributions.contributeManagedClass( entity4Details );
|
||||
}
|
||||
|
||||
private static void contributeEntity5Details(
|
||||
AdditionalMappingContributions contributions,
|
||||
MetadataBuildingContext buildingContext,
|
||||
ClassDetailsRegistry classDetailsRegistry) {
|
||||
final ClassDetails entity5Details = classDetailsRegistry.resolveClassDetails(
|
||||
Entity5.class.getName(),
|
||||
(name, modelBuildingContext) -> {
|
||||
assertThat( name ).isEqualTo( Entity5.class.getName() );
|
||||
assertThat( modelBuildingContext ).isSameAs( buildingContext.getMetadataCollector().getSourceModelBuildingContext() );
|
||||
final JdkClassDetails jdkClassDetails = new JdkClassDetails(
|
||||
Entity5.class,
|
||||
modelBuildingContext
|
||||
);
|
||||
|
||||
final EntityJpaAnnotation entityUsage = (EntityJpaAnnotation) jdkClassDetails.applyAnnotationUsage(
|
||||
JpaAnnotations.ENTITY,
|
||||
modelBuildingContext
|
||||
);
|
||||
entityUsage.name( "___Entity5___" );
|
||||
|
||||
final MutableMemberDetails idField = (MutableMemberDetails) jdkClassDetails.findFieldByName( "id" );
|
||||
idField.applyAnnotationUsage( JpaAnnotations.ID, modelBuildingContext );
|
||||
|
||||
return jdkClassDetails;
|
||||
}
|
||||
Entity5.class.getName()
|
||||
);
|
||||
contributions.contributeManagedClass( entity5Details );
|
||||
}
|
||||
@ -356,46 +329,14 @@ public void contribute(
|
||||
final ClassDetailsRegistry classDetailsRegistry = buildingContext.getMetadataCollector()
|
||||
.getSourceModelBuildingContext()
|
||||
.getClassDetailsRegistry();
|
||||
contributeEntity6Details( contributions, buildingContext, classDetailsRegistry );
|
||||
contributeEntity6Details( contributions, classDetailsRegistry );
|
||||
}
|
||||
|
||||
private void contributeEntity6Details(
|
||||
AdditionalMappingContributions contributions,
|
||||
MetadataBuildingContext buildingContext,
|
||||
ClassDetailsRegistry classDetailsRegistry) {
|
||||
final ClassDetails entity6Details = classDetailsRegistry.resolveClassDetails(
|
||||
"Entity6",
|
||||
(name, modelBuildingContext) -> {
|
||||
assertThat( name ).isEqualTo( "Entity6" );
|
||||
assertThat( modelBuildingContext ).isSameAs( buildingContext.getMetadataCollector().getSourceModelBuildingContext() );
|
||||
|
||||
final DynamicClassDetails classDetails = new DynamicClassDetails( "Entity6", modelBuildingContext );
|
||||
final EntityJpaAnnotation entityUsage = (EntityJpaAnnotation) classDetails.applyAnnotationUsage(
|
||||
JpaAnnotations.ENTITY,
|
||||
modelBuildingContext
|
||||
);
|
||||
entityUsage.name( "Entity6" );
|
||||
|
||||
final DynamicFieldDetails idMember = classDetails.applyAttribute(
|
||||
"id",
|
||||
classDetailsRegistry.resolveClassDetails( Integer.class.getName() ),
|
||||
false,
|
||||
false,
|
||||
modelBuildingContext
|
||||
);
|
||||
idMember.applyAnnotationUsage( JpaAnnotations.ID, modelBuildingContext );
|
||||
|
||||
final DynamicFieldDetails nameMember = classDetails.applyAttribute(
|
||||
"name",
|
||||
classDetailsRegistry.resolveClassDetails( String.class.getName() ),
|
||||
false,
|
||||
false,
|
||||
modelBuildingContext
|
||||
);
|
||||
nameMember.applyAnnotationUsage( HibernateAnnotations.NATIONALIZED, modelBuildingContext );
|
||||
|
||||
return classDetails;
|
||||
}
|
||||
"Entity6"
|
||||
);
|
||||
contributions.contributeManagedClass( entity6Details );
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ dependencyResolutionManagement {
|
||||
def byteBuddyVersion = version "byteBuddy", "1.14.18"
|
||||
def classmateVersion = version "classmate", "1.5.1"
|
||||
def geolatteVersion = version "geolatte", "1.9.1"
|
||||
def hibernateModelsVersion = version "hibernateModels", "0.8.6"
|
||||
def hibernateModelsVersion = version "hibernateModels", "0.9.0"
|
||||
def jandexVersion = version "jandex", "3.2.0"
|
||||
def jacksonVersion = version "jackson", "2.17.0"
|
||||
def jbossLoggingVersion = version "jbossLogging", "3.6.0.Final"
|
||||
@ -107,6 +107,7 @@ dependencyResolutionManagement {
|
||||
library( "loggingProcessor", "org.jboss.logging", "jboss-logging-processor" ).versionRef( jbossLoggingToolVersion )
|
||||
|
||||
library( "hibernateModels", "org.hibernate.models", "hibernate-models" ).versionRef( hibernateModelsVersion )
|
||||
library( "hibernateModelsJandex", "org.hibernate.models", "hibernate-models-jandex" ).versionRef( hibernateModelsVersion )
|
||||
library( "jandex", "io.smallrye", "jandex" ).versionRef( jandexVersion )
|
||||
library( "classmate", "com.fasterxml", "classmate" ).versionRef( classmateVersion )
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user