Skip to content

Commit

Permalink
#78 - Implement AnyMappingAttributeProcessing
Browse files Browse the repository at this point in the history
  • Loading branch information
sebersole committed Nov 19, 2023
1 parent 5afb410 commit fdc65cd
Show file tree
Hide file tree
Showing 26 changed files with 728 additions and 459 deletions.
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ dependencyResolutionManagement {
def hcannVersion = version "hcann", "6.0.6.Final"
library( "hcann", "org.hibernate.common", "hibernate-commons-annotations" ).versionRef( hcannVersion )

def hibernateModelsVersion = version "hibernateModels", "0.5.1"
def hibernateModelsVersion = version "hibernateModels", "0.5.3"
library( "hibernateModels", "org.hibernate.models", "hibernate-models" ).versionRef( hibernateModelsVersion )

def hibernateOrmVersion = version "hibernateOrm", "7.0.0-SNAPSHOT"
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/hibernate/boot/internal/AnyKeyType.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnyKeyType {
String type();
String value();
}
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,7 @@ private static void applyColumnName(
final SoftDeleteType strategy = softDeleteConfig.getEnum( "strategy" );
final String logicalColumnName = coalesce(
strategy.getDefaultColumnName(),
softDeleteConfig.getString( softDeleteConfig.getString( "columnName" ) )
softDeleteConfig.getString( "columnName" )
);
final Identifier physicalColumnName = namingStrategy.toPhysicalColumnName(
database.toIdentifier( logicalColumnName ),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,12 @@ public class DomainModelCategorizationCollector {
private final Map<String,ClassDetails> embeddables = new HashMap<>();
private final GlobalRegistrationsImpl globalRegistrations;

public DomainModelCategorizationCollector(boolean areIdGeneratorsGlobal, ClassDetailsRegistry classDetailsRegistry) {
public DomainModelCategorizationCollector(
boolean areIdGeneratorsGlobal,
ClassDetailsRegistry classDetailsRegistry,
AnnotationDescriptorRegistry descriptorRegistry) {
this.areIdGeneratorsGlobal = areIdGeneratorsGlobal;
this.globalRegistrations = new GlobalRegistrationsImpl( classDetailsRegistry );
this.globalRegistrations = new GlobalRegistrationsImpl( classDetailsRegistry, descriptorRegistry );
}

public Set<ClassDetails> getRootEntities() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import org.hibernate.internal.util.StringHelper;
import org.hibernate.internal.util.collections.CollectionHelper;
import org.hibernate.metamodel.CollectionClassification;
import org.hibernate.models.internal.MutableAnnotationUsage;
import org.hibernate.models.internal.dynamic.DynamicAnnotationUsage;
import org.hibernate.models.orm.categorize.spi.CollectionTypeRegistration;
import org.hibernate.models.orm.categorize.spi.CompositeUserTypeRegistration;
Expand All @@ -51,6 +52,8 @@
import org.hibernate.models.orm.categorize.spi.TableGeneratorRegistration;
import org.hibernate.models.orm.categorize.spi.UserTypeRegistration;
import org.hibernate.models.orm.categorize.xml.internal.XmlAnnotationHelper;
import org.hibernate.models.spi.AnnotationDescriptor;
import org.hibernate.models.spi.AnnotationDescriptorRegistry;
import org.hibernate.models.spi.AnnotationTarget;
import org.hibernate.models.spi.AnnotationUsage;
import org.hibernate.models.spi.ClassDetails;
Expand All @@ -77,6 +80,7 @@
*/
public class GlobalRegistrationsImpl implements GlobalRegistrations {
private final ClassDetailsRegistry classDetailsRegistry;
private final AnnotationDescriptorRegistry descriptorRegistry;

private List<JpaEventListener> jpaEventListeners;
private List<ConversionRegistration> converterRegistrations;
Expand All @@ -93,11 +97,12 @@ public class GlobalRegistrationsImpl implements GlobalRegistrations {
private Map<String,GenericGeneratorRegistration> genericGeneratorRegistrations;

public GlobalRegistrationsImpl(SourceModelContext sourceModelContext) {
this( sourceModelContext.getClassDetailsRegistry() );
this( sourceModelContext.getClassDetailsRegistry(), sourceModelContext.getAnnotationDescriptorRegistry() );
}

public GlobalRegistrationsImpl(ClassDetailsRegistry classDetailsRegistry) {
public GlobalRegistrationsImpl(ClassDetailsRegistry classDetailsRegistry, AnnotationDescriptorRegistry descriptorRegistry) {
this.classDetailsRegistry = classDetailsRegistry;
this.descriptorRegistry = descriptorRegistry;
}

@Override
Expand Down Expand Up @@ -528,7 +533,7 @@ public void collectSequenceGenerators(List<JaxbSequenceGeneratorImpl> sequenceGe
}

sequenceGenerators.forEach( (generator) -> {
final DynamicAnnotationUsage<SequenceGenerator> annotationUsage = new DynamicAnnotationUsage<>( SequenceGenerator.class );
final MutableAnnotationUsage<SequenceGenerator> annotationUsage = makeAnnotation( SequenceGenerator.class );
annotationUsage.setAttributeValue( "name", generator.getName() );
annotationUsage.setAttributeValue( "sequenceName", generator.getSequenceName() );
annotationUsage.setAttributeValue( "catalog", generator.getCatalog() );
Expand All @@ -540,6 +545,11 @@ public void collectSequenceGenerators(List<JaxbSequenceGeneratorImpl> sequenceGe
} );
}

private <A extends Annotation> MutableAnnotationUsage<A> makeAnnotation(Class<A> annotationType) {
final AnnotationDescriptor<A> descriptor = descriptorRegistry.getDescriptor( annotationType );
return new DynamicAnnotationUsage<>( descriptor );
}

public void collectSequenceGenerator(AnnotationUsage<SequenceGenerator> usage) {
collectSequenceGenerator( new SequenceGeneratorRegistration( usage.getAttributeValue( "name" ), usage ) );
}
Expand All @@ -562,7 +572,7 @@ public void collectTableGenerators(List<JaxbTableGeneratorImpl> tableGenerators)
}

tableGenerators.forEach( (generator) -> {
final DynamicAnnotationUsage<TableGenerator> annotationUsage = new DynamicAnnotationUsage<>( TableGenerator.class );
final MutableAnnotationUsage<TableGenerator> annotationUsage = makeAnnotation( TableGenerator.class );
annotationUsage.setAttributeValue( "name", generator.getName() );
annotationUsage.setAttributeValue( "table", generator.getTable() );
annotationUsage.setAttributeValue( "catalog", generator.getCatalog() );
Expand Down Expand Up @@ -599,7 +609,7 @@ private void collectGenericGenerators(List<JaxbGenericIdGeneratorImpl> genericGe
}

genericGenerators.forEach( (generator) -> {
final DynamicAnnotationUsage<GenericGenerator> annotationUsage = new DynamicAnnotationUsage<>( GenericGenerator.class );
final MutableAnnotationUsage<GenericGenerator> annotationUsage = makeAnnotation( GenericGenerator.class );
annotationUsage.setAttributeValue( "name", generator.getName() );
annotationUsage.setAttributeValue( "strategy", generator.getClazz() );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.hibernate.boot.jaxb.mapping.spi.JaxbPersistenceUnitDefaultsImpl;
import org.hibernate.internal.util.MutableObject;
import org.hibernate.models.ModelsException;
import org.hibernate.models.internal.jdk.VoidClassDetails;
import org.hibernate.models.spi.ClassDetails;
import org.hibernate.models.spi.MethodDetails;

Expand Down Expand Up @@ -261,13 +262,13 @@ public static boolean matchesSignature(JpaEventListenerStyle callbackType, Metho
if ( callbackType == JpaEventListenerStyle.CALLBACK ) {
// should have no arguments. and technically (spec) have a void return
return methodDetails.getArgumentTypes().isEmpty()
&& methodDetails.getReturnType() == null;
&& methodDetails.getReturnType() == VoidClassDetails.VOID_CLASS_DETAILS;
}
else {
assert callbackType == JpaEventListenerStyle.LISTENER;
// should have 1 argument. and technically (spec) have a void return
return methodDetails.getArgumentTypes().size() == 1
&& methodDetails.getReturnType() == null;
&& methodDetails.getReturnType() == VoidClassDetails.VOID_CLASS_DETAILS;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,11 @@ public static CategorizedDomainModel processManagedResources(
// JPA id generator global-ity thing
final boolean areIdGeneratorsGlobal = true;
final ClassDetailsRegistry mutableClassDetailsRegistry = sourceModelBuildingContext.getClassDetailsRegistry();
final AnnotationDescriptorRegistry descriptorRegistry = sourceModelBuildingContext.getAnnotationDescriptorRegistry();
final DomainModelCategorizationCollector modelCategorizationCollector = new DomainModelCategorizationCollector(
areIdGeneratorsGlobal,
mutableClassDetailsRegistry
mutableClassDetailsRegistry,
descriptorRegistry
);

final XmlProcessingResult xmlProcessingResult = XmlProcessor.processXml( xmlPreProcessingResult, modelCategorizationCollector, sourceModelBuildingContext );
Expand Down Expand Up @@ -153,8 +155,7 @@ public static CategorizedDomainModel processManagedResources(
final ClassDetailsRegistry classDetailsRegistryImmutable = mutableClassDetailsRegistry
.makeImmutableCopy();

final AnnotationDescriptorRegistry annotationDescriptorRegistryImmutable = sourceModelBuildingContext
.getAnnotationDescriptorRegistry()
final AnnotationDescriptorRegistry annotationDescriptorRegistryImmutable = descriptorRegistry
.makeImmutableCopy();

// Collect the entity hierarchies based on the set of `rootEntities`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public static void processNaturalId(
return;
}

XmlAnnotationHelper.applyNaturalIdCache( jaxbNaturalId, mutableClassDetails );
XmlAnnotationHelper.applyNaturalIdCache( jaxbNaturalId, mutableClassDetails, xmlDocumentContext );

processBaseAttributes( jaxbNaturalId, mutableClassDetails, classAccessType, memberAdjuster, xmlDocumentContext );
}
Expand Down
Loading

0 comments on commit fdc65cd

Please sign in to comment.