Skip to content

Commit 3cb252e

Browse files
committed
HHH-19324 - Switch tests using hbm.xml to use mapping.xml
1 parent 3b5aa82 commit 3cb252e

34 files changed

+796
-318
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
*/
55
package org.hibernate.boot.jaxb.mapping.spi;
66

7+
import jakarta.persistence.DiscriminatorType;
8+
79
import java.util.List;
810

911
/**
@@ -29,6 +31,8 @@ public interface JaxbAnyMapping extends JaxbPersistentAttribute {
2931
*/
3032
interface Key {
3133
List<JaxbColumnImpl> getColumns();
34+
String getType();
35+
String getJavaClass();
3236
}
3337

3438
/**
@@ -42,6 +46,11 @@ interface Discriminator {
4246
*/
4347
JaxbColumnImpl getColumn();
4448

49+
/**
50+
* The type of discriminator
51+
*/
52+
DiscriminatorType getType();
53+
4554
/**
4655
* Mapping of discriminator-values to the corresponding entity names
4756
*/

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
import java.util.Map;
99

1010
import org.hibernate.annotations.ManyToAny;
11+
import org.hibernate.boot.models.annotations.spi.AttributeMarker;
1112
import org.hibernate.models.spi.ModelsContext;
1213

1314
@SuppressWarnings({ "ClassExplicitlyAnnotation", "unused" })
1415
@jakarta.annotation.Generated("org.hibernate.orm.build.annotations.ClassGeneratorProcessor")
15-
public class ManyToAnyAnnotation implements ManyToAny {
16+
public class ManyToAnyAnnotation implements ManyToAny, AttributeMarker, AttributeMarker.Fetchable {
1617
private jakarta.persistence.FetchType fetch;
1718

1819
/**

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,8 @@ private static void renderClass(MutableClassDetails classDetails, XmlDocumentCon
312312

313313
final RenderingTargetCollectingImpl collectingTarget = new RenderingTargetCollectingImpl();
314314
final SimpleRenderer renderer = new SimpleRenderer( collectingTarget );
315-
renderer.renderClass( classDetails, xmlDocumentContext.getModelBuildingContext() );
316-
XML_PROCESS_LOGGER.debugf( "Class annotations from XML for %s:\n%s", classDetails.getName(), renderer.toString() );
315+
renderer.renderClass( classDetails, xmlDocumentContext.getModelBuildingContext() );
316+
XML_PROCESS_LOGGER.debugf( "Class annotations from XML for %s:\n%s", classDetails.getName(), collectingTarget.toString() );
317317
}
318318

319319
private static void applyAccessAnnotation(

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

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,26 @@
44
*/
55
package org.hibernate.boot.models.xml.internal.attr;
66

7-
import java.util.List;
8-
7+
import jakarta.persistence.AccessType;
8+
import jakarta.persistence.DiscriminatorType;
9+
import jakarta.persistence.JoinColumn;
910
import org.hibernate.annotations.AnyDiscriminatorValue;
10-
import org.hibernate.boot.jaxb.mapping.spi.JaxbAnyDiscriminatorValueMappingImpl;
11-
import org.hibernate.boot.jaxb.mapping.spi.JaxbAnyMappingDiscriminatorImpl;
11+
import org.hibernate.boot.jaxb.mapping.spi.JaxbAnyMapping;
1212
import org.hibernate.boot.jaxb.mapping.spi.JaxbAnyMappingImpl;
13-
import org.hibernate.boot.jaxb.mapping.spi.JaxbAnyMappingKeyImpl;
1413
import org.hibernate.boot.jaxb.mapping.spi.JaxbColumnImpl;
14+
import org.hibernate.boot.jaxb.mapping.spi.JaxbDiscriminatorMapping;
1515
import org.hibernate.boot.models.HibernateAnnotations;
1616
import org.hibernate.boot.models.JpaAnnotations;
1717
import org.hibernate.boot.models.annotations.internal.AnyAnnotation;
1818
import org.hibernate.boot.models.annotations.internal.AnyDiscriminatorAnnotation;
1919
import org.hibernate.boot.models.annotations.internal.AnyDiscriminatorValueAnnotation;
2020
import org.hibernate.boot.models.annotations.internal.AnyDiscriminatorValuesAnnotation;
2121
import org.hibernate.boot.models.annotations.internal.AnyKeTypeAnnotation;
22+
import org.hibernate.boot.models.annotations.internal.AnyKeyJavaClassAnnotation;
2223
import org.hibernate.boot.models.annotations.internal.ColumnJpaAnnotation;
2324
import org.hibernate.boot.models.annotations.internal.JoinColumnJpaAnnotation;
2425
import org.hibernate.boot.models.annotations.internal.JoinColumnsJpaAnnotation;
26+
import org.hibernate.boot.models.xml.internal.SimpleTypeInterpretation;
2527
import org.hibernate.boot.models.xml.internal.XmlAnnotationHelper;
2628
import org.hibernate.boot.models.xml.internal.XmlProcessingHelper;
2729
import org.hibernate.boot.models.xml.spi.XmlDocumentContext;
@@ -31,15 +33,15 @@
3133
import org.hibernate.models.spi.MutableClassDetails;
3234
import org.hibernate.models.spi.MutableMemberDetails;
3335

34-
import jakarta.persistence.AccessType;
35-
import jakarta.persistence.DiscriminatorType;
36-
import jakarta.persistence.JoinColumn;
36+
import java.util.List;
3737

3838
import static org.hibernate.boot.models.HibernateAnnotations.ANY_DISCRIMINATOR_VALUE;
3939
import static org.hibernate.boot.models.JpaAnnotations.JOIN_COLUMN;
40-
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.*;
4140
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyAccess;
4241
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyAttributeAccessor;
42+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyFetching;
43+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyOptimisticLock;
44+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyOptionality;
4345
import static org.hibernate.internal.util.NullnessHelper.coalesce;
4446

4547
/**
@@ -77,11 +79,11 @@ public static MutableMemberDetails processAnyMappingAttribute(
7779
return memberDetails;
7880
}
7981

80-
private static void applyDiscriminator(
82+
static void applyDiscriminator(
8183
MutableMemberDetails memberDetails,
82-
JaxbAnyMappingImpl jaxbHbmAnyMapping,
84+
JaxbAnyMapping jaxbHbmAnyMapping,
8385
XmlDocumentContext xmlDocumentContext) {
84-
final JaxbAnyMappingDiscriminatorImpl jaxbDiscriminator = jaxbHbmAnyMapping.getDiscriminator();
86+
final JaxbAnyMapping.Discriminator jaxbDiscriminator = jaxbHbmAnyMapping.getDiscriminator();
8587
final AnyDiscriminatorAnnotation anyDiscriminatorAnn = (AnyDiscriminatorAnnotation) memberDetails.applyAnnotationUsage(
8688
HibernateAnnotations.ANY_DISCRIMINATOR,
8789
xmlDocumentContext.getModelBuildingContext()
@@ -105,7 +107,7 @@ private static void applyDiscriminator(
105107
columnAnn.apply( jaxbColumn, xmlDocumentContext );
106108
}
107109

108-
final List<JaxbAnyDiscriminatorValueMappingImpl> jaxbValueMappings = jaxbDiscriminator.getValueMappings();
110+
final List<? extends JaxbDiscriminatorMapping> jaxbValueMappings = jaxbDiscriminator.getValueMappings();
109111
if ( CollectionHelper.isNotEmpty( jaxbValueMappings ) ) {
110112
final AnyDiscriminatorValuesAnnotation discriminatorValuesUsage = (AnyDiscriminatorValuesAnnotation) memberDetails.replaceAnnotationUsage(
111113
ANY_DISCRIMINATOR_VALUE,
@@ -120,14 +122,14 @@ private static void applyDiscriminator(
120122
}
121123

122124
private static AnyDiscriminatorValue[] collectDiscriminatorValues(
123-
List<JaxbAnyDiscriminatorValueMappingImpl> jaxbValueMappings,
125+
List<? extends JaxbDiscriminatorMapping> jaxbValueMappings,
124126
XmlDocumentContext xmlDocumentContext) {
125127
final AnyDiscriminatorValue[] values = new AnyDiscriminatorValue[jaxbValueMappings.size()];
126128
for ( int i = 0; i < jaxbValueMappings.size(); i++ ) {
127129
final AnyDiscriminatorValueAnnotation valueAnn = ANY_DISCRIMINATOR_VALUE.createUsage( xmlDocumentContext.getModelBuildingContext() );
128130
values[i] = valueAnn;
129131

130-
final JaxbAnyDiscriminatorValueMappingImpl jaxbValue = jaxbValueMappings.get( i );
132+
final JaxbDiscriminatorMapping jaxbValue = jaxbValueMappings.get( i );
131133

132134
valueAnn.discriminator( jaxbValue.getDiscriminatorValue() );
133135

@@ -141,18 +143,25 @@ private static AnyDiscriminatorValue[] collectDiscriminatorValues(
141143
return values;
142144
}
143145

144-
private static void applyKey(
146+
static void applyKey(
145147
MutableMemberDetails memberDetails,
146-
JaxbAnyMappingImpl jaxbHbmAnyMapping,
148+
JaxbAnyMapping jaxbHbmAnyMapping,
147149
XmlDocumentContext xmlDocumentContext) {
148-
final JaxbAnyMappingKeyImpl jaxbKey = jaxbHbmAnyMapping.getKey();
150+
final JaxbAnyMapping.Key jaxbKey = jaxbHbmAnyMapping.getKey();
149151
if ( StringHelper.isNotEmpty( jaxbKey.getType() ) ) {
150152
final AnyKeTypeAnnotation keyTypeUsage = (AnyKeTypeAnnotation) memberDetails.applyAnnotationUsage(
151153
HibernateAnnotations.ANY_KEY_TYPE,
152154
xmlDocumentContext.getModelBuildingContext()
153155
);
154156
keyTypeUsage.value( jaxbKey.getType() );
155157
}
158+
else if ( StringHelper.isNotEmpty( jaxbKey.getJavaClass() ) ) {
159+
final AnyKeyJavaClassAnnotation keyJavaType = (AnyKeyJavaClassAnnotation) memberDetails.applyAnnotationUsage(
160+
HibernateAnnotations.ANY_KEY_JAVA_CLASS,
161+
xmlDocumentContext.getModelBuildingContext()
162+
);
163+
keyJavaType.value( resolveKeyType( jaxbKey.getJavaClass(), xmlDocumentContext ) );
164+
}
156165

157166
if ( jaxbKey.getColumns().isEmpty() ) {
158167
memberDetails.applyAnnotationUsage( JpaAnnotations.JOIN_COLUMN, xmlDocumentContext.getModelBuildingContext() );
@@ -177,4 +186,17 @@ private static void applyKey(
177186
}
178187
}
179188

189+
private static Class<?> resolveKeyType(String name, XmlDocumentContext xmlDocumentContext) {
190+
final SimpleTypeInterpretation simpleTypeInterpretation = SimpleTypeInterpretation.interpret( name );
191+
if ( simpleTypeInterpretation != null ) {
192+
return simpleTypeInterpretation.getJavaType();
193+
}
194+
195+
return xmlDocumentContext
196+
.getBootstrapContext()
197+
.getModelsContext()
198+
.getClassLoading()
199+
.classForName( xmlDocumentContext.resolveClassName( name ) );
200+
}
201+
180202
}

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,24 @@
44
*/
55
package org.hibernate.boot.models.xml.internal.attr;
66

7+
import jakarta.persistence.AccessType;
78
import org.hibernate.boot.jaxb.mapping.spi.JaxbPluralAnyMappingImpl;
9+
import org.hibernate.boot.models.HibernateAnnotations;
10+
import org.hibernate.boot.models.annotations.internal.ManyToAnyAnnotation;
811
import org.hibernate.boot.models.xml.internal.XmlAnnotationHelper;
912
import org.hibernate.boot.models.xml.internal.XmlProcessingHelper;
13+
import org.hibernate.boot.models.xml.internal.db.TableProcessing;
1014
import org.hibernate.boot.models.xml.spi.XmlDocumentContext;
1115
import org.hibernate.models.spi.MutableClassDetails;
1216
import org.hibernate.models.spi.MutableMemberDetails;
1317

14-
import jakarta.persistence.AccessType;
15-
18+
import static org.hibernate.boot.models.xml.internal.attr.AnyMappingAttributeProcessing.applyDiscriminator;
19+
import static org.hibernate.boot.models.xml.internal.attr.AnyMappingAttributeProcessing.applyKey;
20+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyAccess;
21+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyAttributeAccessor;
22+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyFetching;
23+
import static org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing.applyOptimisticLock;
24+
import static org.hibernate.boot.models.xml.internal.attr.CommonPluralAttributeProcessing.applyPluralAttributeStructure;
1625
import static org.hibernate.internal.util.NullnessHelper.coalesce;
1726

1827
/**
@@ -32,8 +41,25 @@ public static MutableMemberDetails processPluralAnyMappingAttributes(
3241
accessType,
3342
declarer
3443
);
44+
45+
final ManyToAnyAnnotation manyToAnyAnn = (ManyToAnyAnnotation) memberDetails.applyAnnotationUsage(
46+
HibernateAnnotations.MANY_TO_ANY,
47+
xmlDocumentContext.getModelBuildingContext()
48+
);
49+
50+
applyAccess( accessType, memberDetails, xmlDocumentContext );
51+
applyAttributeAccessor( jaxbHbmManyToAny, memberDetails, xmlDocumentContext );
52+
applyFetching( jaxbHbmManyToAny, memberDetails, manyToAnyAnn, xmlDocumentContext );
53+
applyOptimisticLock( jaxbHbmManyToAny, memberDetails, xmlDocumentContext );
54+
55+
applyDiscriminator( memberDetails, jaxbHbmManyToAny, xmlDocumentContext );
56+
applyKey( memberDetails, jaxbHbmManyToAny, xmlDocumentContext );
57+
3558
XmlAnnotationHelper.applyCascading( jaxbHbmManyToAny.getCascade(), memberDetails, xmlDocumentContext );
3659

37-
throw new UnsupportedOperationException( "Support for many-to-any attributes not yet implemented" );
60+
applyPluralAttributeStructure( jaxbHbmManyToAny, memberDetails, xmlDocumentContext );
61+
TableProcessing.transformJoinTable( jaxbHbmManyToAny.getJoinTable(), memberDetails, xmlDocumentContext );
62+
63+
return memberDetails;
3864
}
3965
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package org.hibernate.boot.models.xml.spi;
66

77
import org.hibernate.HibernateException;
8+
import org.hibernate.boot.models.xml.internal.SimpleTypeInterpretation;
89
import org.hibernate.boot.models.xml.internal.XmlAnnotationHelper;
910
import org.hibernate.boot.spi.BootstrapContext;
1011
import org.hibernate.boot.spi.EffectiveMappingDefaults;
@@ -50,6 +51,11 @@ default MutableClassDetails resolveJavaType(String name) {
5051
}
5152

5253
default String resolveClassName(String specifiedName) {
54+
final SimpleTypeInterpretation simpleTypeInterpretation = SimpleTypeInterpretation.interpret( specifiedName );
55+
if ( simpleTypeInterpretation != null ) {
56+
return simpleTypeInterpretation.getJavaType().getName();
57+
}
58+
5359
if ( specifiedName.contains( "." ) ) {
5460
return specifiedName;
5561
}

hibernate-core/src/main/resources/org/hibernate/xsd/mapping/mapping-7.0.xsd

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3163,7 +3163,10 @@
31633163
</xsd:documentation>
31643164
</xsd:annotation>
31653165
<xsd:sequence>
3166-
<xsd:element name="type" type="xsd:string" minOccurs="0"/>
3166+
<xsd:choice>
3167+
<xsd:element name="type" type="xsd:string" minOccurs="0"/>
3168+
<xsd:element name="java-class" type="xsd:string" minOccurs="0"/>
3169+
</xsd:choice>
31673170
<xsd:element name="column" type="orm:column" minOccurs="0" maxOccurs="unbounded" />
31683171
</xsd:sequence>
31693172
</xsd:complexType>
@@ -3196,6 +3199,8 @@
31963199
<xsd:element name="discriminator" type="orm:any-discriminator"/>
31973200
<xsd:element name="key" type="orm:any-key"/>
31983201
<xsd:element name="cascade" type="orm:cascade-type" minOccurs="0"/>
3202+
3203+
<xsd:element name="join-table" type="orm:join-table"/>
31993204
</xsd:sequence>
32003205

32013206
<xsd:attribute name="name" use="required" type="xsd:string"/>

hibernate-core/src/test/java/org/hibernate/orm/test/any/hbm/AnyEagerHbmTest.java

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)