Skip to content

Commit c0bb4aa

Browse files
sebersoledreab8
authored andcommitted
HHH-17460 - Ongoing JPA 32 work
1 parent 0ea5de8 commit c0bb4aa

File tree

6 files changed

+58
-23
lines changed

6 files changed

+58
-23
lines changed

hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/db/JaxbTableMapping.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@
66
*/
77
package org.hibernate.boot.jaxb.mapping.spi.db;
88

9+
import java.util.List;
10+
11+
import org.hibernate.boot.jaxb.mapping.spi.JaxbIndexImpl;
912
import org.hibernate.boot.jaxb.mapping.spi.JaxbSchemaAware;
10-
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbCheckable;
11-
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbDatabaseObject;
13+
import org.hibernate.boot.jaxb.mapping.spi.JaxbUniqueConstraintImpl;
1214

1315
/**
1416
* @author Steve Ebersole
1517
*/
1618
public interface JaxbTableMapping extends JaxbSchemaAware, JaxbCheckable, JaxbDatabaseObject {
1719
String getComment();
1820
String getOptions();
21+
22+
List<JaxbIndexImpl> getIndexes();
23+
List<JaxbUniqueConstraintImpl> getUniqueConstraints();
1924
}

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
import jakarta.persistence.ForeignKey;
123123
import jakarta.persistence.GeneratedValue;
124124
import jakarta.persistence.IdClass;
125+
import jakarta.persistence.Index;
125126
import jakarta.persistence.Inheritance;
126127
import jakarta.persistence.JoinColumn;
127128
import jakarta.persistence.JoinTable;
@@ -441,8 +442,21 @@ private void processComplementaryTableDefinitions() {
441442
TableBinder.addIndexes( appliedTable, usage.getList( "indexes" ), context );
442443
} );
443444

444-
annotatedClass.forEachAnnotationUsage( jakarta.persistence.Table.class, (usage) -> {
445-
TableBinder.addJpaIndexes( persistentClass.getTable(), usage.getList( "indexes" ), context );
445+
final AnnotationUsage<jakarta.persistence.Table> jpaTableUsage = annotatedClass.getAnnotationUsage( jakarta.persistence.Table.class );
446+
if ( jpaTableUsage != null ) {
447+
TableBinder.addJpaIndexes( persistentClass.getTable(), jpaTableUsage.getList( "indexes" ), context );
448+
}
449+
450+
final InFlightMetadataCollector.EntityTableXref entityTableXref = context
451+
.getMetadataCollector()
452+
.getEntityTableXref( persistentClass.getEntityName() );
453+
454+
annotatedClass.forEachAnnotationUsage( jakarta.persistence.SecondaryTable.class, (usage) -> {
455+
final Identifier secondaryTableLogicalName = toIdentifier( usage.getString( "name" ) );
456+
final Table table = entityTableXref.resolveTable( secondaryTableLogicalName );
457+
assert table != null;
458+
459+
TableBinder.addJpaIndexes( table, usage.getList( "indexes" ), context );
446460
} );
447461
}
448462

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -979,8 +979,8 @@ && isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
979979
&& isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
980980
annotation.setValue( "schema", defaults.getSchema() );
981981
}
982-
buildUniqueConstraints( annotation, subelement.getUniqueConstraint() );
983-
buildIndex( annotation, subelement.getIndex() );
982+
buildUniqueConstraints( annotation, subelement.getUniqueConstraints() );
983+
buildIndex( annotation, subelement.getIndexes() );
984984
annotation.setValue( "joinColumns", getJoinColumns( subelement.getJoinColumn(), false ) );
985985
annotation.setValue( "inverseJoinColumns", getJoinColumns( subelement.getInverseJoinColumn(), true ) );
986986
return AnnotationFactory.create( annotation );
@@ -2772,7 +2772,7 @@ public static TableGenerator buildTableGeneratorAnnotation(JaxbTableGeneratorImp
27722772
copyAttribute( ad, "pk-column-value", element.getPkColumnValue(), false );
27732773
copyAttribute( ad, "initial-value", element.getInitialValue(), false );
27742774
copyAttribute( ad, "allocation-size", element.getAllocationSize(), false );
2775-
buildUniqueConstraints( ad, element.getUniqueConstraint() );
2775+
buildUniqueConstraints( ad, element.getUniqueConstraints() );
27762776
if ( isEmpty( (String) ad.valueOf( "schema" ) )
27772777
&& isNotEmpty( defaults.getSchema() ) ) {
27782778
ad.setValue( "schema", defaults.getSchema() );
@@ -3055,8 +3055,8 @@ && isEmpty( (String) annotation.valueOf( "catalog" ) ) ) {
30553055
&& isEmpty( (String) annotation.valueOf( "schema" ) ) ) {
30563056
annotation.setValue( "schema", defaults.getSchema() );
30573057
}
3058-
buildUniqueConstraints( annotation, element.getUniqueConstraint() );
3059-
buildIndex( annotation, element.getIndex() );
3058+
buildUniqueConstraints( annotation, element.getUniqueConstraints() );
3059+
buildIndex( annotation, element.getIndexes() );
30603060
return AnnotationFactory.create( annotation );
30613061
}
30623062
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -723,8 +723,8 @@ public void collectTableGenerators(List<JaxbTableGeneratorImpl> tableGenerators)
723723
applyStringAttributeIfSpecified( "pkColumnValue", generator.getPkColumnValue(), annotationUsage );
724724
applyAttributeIfSpecified( "initialValue", generator.getInitialValue(), annotationUsage );
725725
applyAttributeIfSpecified( "allocationSize", generator.getAllocationSize(), annotationUsage );
726-
applyAttributeIfSpecified( "uniqueConstraints", generator.getUniqueConstraint(), annotationUsage );
727-
applyAttributeIfSpecified( "indexes", generator.getIndex(), annotationUsage );
726+
applyAttributeIfSpecified( "uniqueConstraints", generator.getUniqueConstraints(), annotationUsage );
727+
applyAttributeIfSpecified( "indexes", generator.getIndexes(), annotationUsage );
728728
applyStringAttributeIfSpecified( "options", generator.getOptions(), annotationUsage );
729729

730730
collectTableGenerator( new TableGeneratorRegistration( generator.getName(), annotationUsage ) );

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbCheckable;
8989
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbColumnJoined;
9090
import org.hibernate.boot.jaxb.mapping.spi.db.JaxbTableMapping;
91+
import org.hibernate.boot.models.JpaAnnotations;
9192
import org.hibernate.boot.models.categorize.spi.JpaEventListener;
9293
import org.hibernate.boot.models.categorize.spi.JpaEventListenerStyle;
9394
import org.hibernate.boot.models.internal.AnnotationUsageHelper;
@@ -616,15 +617,14 @@ public static <A extends Annotation> void applyIndexes(
616617
}
617618

618619
final List<AnnotationUsage<Index>> indexes = new ArrayList<>( jaxbIndexes.size() );
620+
final AnnotationDescriptor<Index> indexDescriptor = xmlDocumentContext.getModelBuildingContext()
621+
.getAnnotationDescriptorRegistry()
622+
.getDescriptor( Index.class );
619623
jaxbIndexes.forEach( jaxbIndex -> {
620-
final MutableAnnotationUsage<Index> indexAnn = XmlProcessingHelper.getOrMakeAnnotation(
621-
Index.class,
624+
final MutableAnnotationUsage<Index> indexAnn = indexDescriptor.createUsage(
622625
target,
623-
xmlDocumentContext
626+
xmlDocumentContext.getModelBuildingContext()
624627
);
625-
final AnnotationDescriptor<Index> indexDescriptor = xmlDocumentContext.getModelBuildingContext()
626-
.getAnnotationDescriptorRegistry()
627-
.getDescriptor( Index.class );
628628
applyOr( jaxbIndex, JaxbIndexImpl::getName, "name", indexAnn, indexDescriptor );
629629
applyOr( jaxbIndex, JaxbIndexImpl::getColumnList, "columnList", indexAnn, indexDescriptor );
630630
applyOr( jaxbIndex, JaxbIndexImpl::isUnique, "unique", indexAnn, indexDescriptor );
@@ -677,10 +677,6 @@ public static MutableAnnotationUsage<JoinTable> applyJoinTable(
677677
);
678678
}
679679

680-
applyUniqueConstraints( jaxbJoinTable.getUniqueConstraint(), memberDetails, joinTableAnn, xmlDocumentContext );
681-
682-
applyIndexes( jaxbJoinTable.getIndex(), memberDetails, joinTableAnn, xmlDocumentContext );
683-
684680
return joinTableAnn;
685681
}
686682

@@ -836,8 +832,8 @@ public static void applyTableGenerator(
836832
XmlProcessingHelper.applyAttributeIfSpecified( "pkColumnValue", jaxbGenerator.getPkColumnValue(), annotationUsage );
837833
XmlProcessingHelper.applyAttributeIfSpecified( "initialValue", jaxbGenerator.getInitialValue(), annotationUsage );
838834
XmlProcessingHelper.applyAttributeIfSpecified( "allocationSize", jaxbGenerator.getInitialValue(), annotationUsage );
839-
applyUniqueConstraints( jaxbGenerator.getUniqueConstraint(), memberDetails, annotationUsage, xmlDocumentContext );
840-
applyIndexes( jaxbGenerator.getIndex(), memberDetails, annotationUsage, xmlDocumentContext );
835+
applyUniqueConstraints( jaxbGenerator.getUniqueConstraints(), memberDetails, annotationUsage, xmlDocumentContext );
836+
applyIndexes( jaxbGenerator.getIndexes(), memberDetails, annotationUsage, xmlDocumentContext );
841837
}
842838

843839
public static void applyUuidGenerator(
@@ -1042,6 +1038,8 @@ public static <A extends Annotation> void applyTableAttributes(
10421038
applyOr( jaxbTable, JaxbTableMapping::getOptions, "options", tableAnn, annotationDescriptor );
10431039
applyOr( jaxbTable, JaxbTableMapping::getComment, "comment", tableAnn, annotationDescriptor );
10441040
applyCheckConstraints( jaxbTable, target, tableAnn, xmlDocumentContext );
1041+
applyUniqueConstraints( jaxbTable.getUniqueConstraints(), target, tableAnn, xmlDocumentContext );
1042+
applyIndexes( jaxbTable.getIndexes(), target, tableAnn, xmlDocumentContext );
10451043
}
10461044

10471045
public static void applyNaturalId(

hibernate-core/src/main/xjb/mapping-bindings.xjb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,12 @@
412412

413413
<bindings node="//xsd:complexType[@name='table']">
414414
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.db.JaxbTableMapping</inheritance:implements>
415+
<bindings node=".//xsd:element[@name='unique-constraint']">
416+
<property name="uniqueConstraints"/>
417+
</bindings>
418+
<bindings node=".//xsd:element[@name='index']">
419+
<property name="indexes"/>
420+
</bindings>
415421
</bindings>
416422

417423
<bindings node="//xsd:complexType[@name='check-constraint']">
@@ -484,6 +490,12 @@
484490

485491
<bindings node="//xsd:complexType[@name='join-table']">
486492
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.db.JaxbTableMapping</inheritance:implements>
493+
<bindings node=".//xsd:element[@name='unique-constraint']">
494+
<property name="uniqueConstraints"/>
495+
</bindings>
496+
<bindings node=".//xsd:element[@name='index']">
497+
<property name="indexes"/>
498+
</bindings>
487499
</bindings>
488500

489501
<bindings node="//xsd:complexType[@name='collection-table']">
@@ -503,6 +515,12 @@
503515
</bindings>
504516
<bindings node="//xsd:complexType[@name='table-generator']">
505517
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.db.JaxbTableMapping</inheritance:implements>
518+
<bindings node=".//xsd:element[@name='unique-constraint']">
519+
<property name="uniqueConstraints"/>
520+
</bindings>
521+
<bindings node=".//xsd:element[@name='index']">
522+
<property name="indexes"/>
523+
</bindings>
506524
</bindings>
507525
<bindings node="//xsd:complexType[@name='sequence-generator']">
508526
<inheritance:implements>org.hibernate.boot.jaxb.mapping.spi.JaxbSchemaAware</inheritance:implements>

0 commit comments

Comments
 (0)