diff --git a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/attr/CommonPluralAttributeProcessing.java b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/attr/CommonPluralAttributeProcessing.java
index b77deb2305a8..4369e7b19b2a 100644
--- a/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/attr/CommonPluralAttributeProcessing.java
+++ b/hibernate-core/src/main/java/org/hibernate/boot/models/xml/internal/attr/CommonPluralAttributeProcessing.java
@@ -201,8 +201,7 @@ public static void applyPluralAttributeStructure(
private static FetchMode interpretFetchMode(JaxbPluralFetchModeImpl fetchMode) {
return switch ( fetchMode ) {
case JOIN -> FetchMode.JOIN;
- case SELECT -> FetchMode.SELECT;
- case SUBSELECT -> FetchMode.SELECT;
+ case SELECT, SUBSELECT -> FetchMode.SELECT;
};
}
@@ -211,15 +210,16 @@ private static void applyOrderColumn(
MutableMemberDetails memberDetails,
XmlDocumentContext xmlDocumentContext) {
final JaxbOrderColumnImpl jaxbOrderColumn = jaxbPluralAttribute.getOrderColumn();
- if ( jaxbOrderColumn == null ) {
- return;
- }
-
- final OrderColumnJpaAnnotation orderColumnAnn = (OrderColumnJpaAnnotation) memberDetails.applyAnnotationUsage(
- JpaAnnotations.ORDER_COLUMN,
- xmlDocumentContext.getModelBuildingContext()
- );
+ if ( jaxbOrderColumn != null
+ || jaxbPluralAttribute.getClassification() == LimitedCollectionClassification.LIST ) {
+ final OrderColumnJpaAnnotation orderColumnAnn = (OrderColumnJpaAnnotation) memberDetails.applyAnnotationUsage(
+ JpaAnnotations.ORDER_COLUMN,
+ xmlDocumentContext.getModelBuildingContext()
+ );
- orderColumnAnn.apply( jaxbOrderColumn, xmlDocumentContext );
+ if ( jaxbOrderColumn != null ) {
+ orderColumnAnn.apply( jaxbOrderColumn, xmlDocumentContext );
+ }
+ }
}
}
diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/boot/models/hbm/collections/list/ListTests.java b/hibernate-core/src/test/java/org/hibernate/orm/test/boot/models/hbm/collections/list/ListTests.java
index 786b28d278af..b65b9b205d21 100644
--- a/hibernate-core/src/test/java/org/hibernate/orm/test/boot/models/hbm/collections/list/ListTests.java
+++ b/hibernate-core/src/test/java/org/hibernate/orm/test/boot/models/hbm/collections/list/ListTests.java
@@ -6,6 +6,7 @@
import org.hibernate.mapping.BasicValue;
import org.hibernate.mapping.Component;
+import org.hibernate.mapping.KeyValue;
import org.hibernate.mapping.List;
import org.hibernate.mapping.ManyToOne;
import org.hibernate.mapping.PersistentClass;
@@ -29,6 +30,8 @@ void testXml(DomainModelScope domainModelScope) {
final PersistentClass rootBinding = domainModelScope.getDomainModel().getEntityBinding( Root.class.getName() );
validateTags( rootBinding.getProperty( "tags" ) );
validateCategories( rootBinding.getProperty( "categories" ) );
+ validateAdmins( rootBinding.getProperty( "admins" ) );
+ validateAdmins2( rootBinding.getProperty( "admins2" ) );
}
private void validateTags(Property tags) {
@@ -58,9 +61,6 @@ private void validateCategories(Property categories) {
else if ( "owner".equals( subProperty.getName() ) ) {
validateCategoryOwner( subProperty );
}
- else if ( "admins".equals( subProperty.getName() ) ) {
- validateAdmins( subProperty );
- }
else {
fail( "Unexpected Category property :" + subProperty.getName() );
}
@@ -80,16 +80,41 @@ private void validateCategoryOwner(Property owenerProperty) {
}
- private void validateAdmins(Property adminsProperty) {
- assertThat( adminsProperty.getColumns() ).hasSize( 1 );
- assertThat( adminsProperty.getColumns().get( 0 ).getName() ).isEqualTo( "root_fk" );
+ private void validateAdmins(Property property) {
+ // mapped as many-to-many
+ assertThat( property.getColumns() ).isEmpty();
- final List listValue = (List) adminsProperty.getValue();
+ final List listValue = (List) property.getValue();
assertThat( listValue.getCollectionTable().getName() ).isEqualTo( "root_admins" );
+ final KeyValue foreignKey = listValue.getKey();
+ assertThat( foreignKey.getColumns() ).hasSize( 1 );
+ assertThat( foreignKey.getColumns().get( 0 ).getName() ).isEqualTo( "root_fk" );
+
+ final BasicValue indexValue = (BasicValue) listValue.getIndex();
+ assertThat( indexValue.getColumns() ).hasSize( 1 );
+
+ final ManyToOne element = (ManyToOne) listValue.getElement();
+ assertThat( element.getReferencedEntityName() ).isEqualTo( User.class.getName() );
+ }
+
+ private void validateAdmins2(Property property) {
+ // mapped as one-to-many
+ assertThat( property.getColumns() ).isEmpty();
+
+ final List listValue = (List) property.getValue();
+ assertThat( listValue.getColumns() ).isEmpty();
+ assertThat( listValue.getCollectionTable().getName() ).isEqualTo( "root_admins2" );
+
+ // key
+ final KeyValue foreignKey = listValue.getKey();
+ assertThat( foreignKey.getColumns() ).hasSize( 1 );
+ assertThat( foreignKey.getColumns().get( 0 ).getName() ).isEqualTo( "root_fk" );
+
final BasicValue indexValue = (BasicValue) listValue.getIndex();
assertThat( indexValue.getColumns() ).hasSize( 1 );
final ManyToOne element = (ManyToOne) listValue.getElement();
+ assertThat( element.getReferencedEntityName() ).isEqualTo( User.class.getName() );
}
}
diff --git a/hibernate-core/src/test/resources/mappings/models/hbm/list/mapping.xml b/hibernate-core/src/test/resources/mappings/models/hbm/list/mapping.xml
index d2145aa86834..b20905ee91fa 100644
--- a/hibernate-core/src/test/resources/mappings/models/hbm/list/mapping.xml
+++ b/hibernate-core/src/test/resources/mappings/models/hbm/list/mapping.xml
@@ -22,7 +22,6 @@
-
@@ -30,7 +29,6 @@
-