Skip to content

Commit 2adaf76

Browse files
committed
HHH-19324 - Switch tests using hbm.xml to use mapping.xml
HHH-19428 - Support @ListIndexBase in mapping.xml
1 parent f7c1a05 commit 2adaf76

File tree

10 files changed

+148
-95
lines changed

10 files changed

+148
-95
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public interface JaxbPluralAttribute extends JaxbPersistentAttribute, JaxbLockab
3838
JaxbOrderColumnImpl getOrderColumn();
3939
void setOrderColumn(JaxbOrderColumnImpl value);
4040

41+
Integer getListIndexBase();
42+
void setListIndexBase(Integer value);
43+
4144
String getSort();
4245
void setSort(String value);
4346

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.hibernate.internal.util.StringHelper;
88

9+
import java.io.Serializable;
910
import java.math.BigDecimal;
1011
import java.math.BigInteger;
1112
import java.net.InetAddress;
@@ -74,6 +75,7 @@ public enum SimpleTypeInterpretation {
7475
JDBC_TIME( Time.class ),
7576
CALENDAR( Calendar.class ),
7677
TIME_ZONE( TimeZone.class ),
78+
SERIALIZABLE( Serializable.class ),
7779

7880
PRIMITIVE_BOOLEAN( boolean.class, BOOLEAN ),
7981
PRIMITIVE_BYTE( byte.class, BYTE ),

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hibernate.boot.models.JpaAnnotations;
1414
import org.hibernate.boot.models.annotations.internal.BatchSizeAnnotation;
1515
import org.hibernate.boot.models.annotations.internal.FetchAnnotation;
16+
import org.hibernate.boot.models.annotations.internal.ListIndexBaseAnnotation;
1617
import org.hibernate.boot.models.annotations.internal.MapKeyClassJpaAnnotation;
1718
import org.hibernate.boot.models.annotations.internal.MapKeyColumnJpaAnnotation;
1819
import org.hibernate.boot.models.annotations.internal.MapKeyEnumeratedJpaAnnotation;
@@ -28,8 +29,8 @@
2829
import org.hibernate.internal.util.StringHelper;
2930
import org.hibernate.models.spi.ClassDetails;
3031
import org.hibernate.models.spi.ClassDetailsRegistry;
31-
import org.hibernate.models.spi.MutableMemberDetails;
3232
import org.hibernate.models.spi.ModelsContext;
33+
import org.hibernate.models.spi.MutableMemberDetails;
3334

3435
/**
3536
* @author Marco Belladelli
@@ -210,16 +211,28 @@ private static void applyOrderColumn(
210211
MutableMemberDetails memberDetails,
211212
XmlDocumentContext xmlDocumentContext) {
212213
final JaxbOrderColumnImpl jaxbOrderColumn = jaxbPluralAttribute.getOrderColumn();
214+
final Integer listIndexBase = jaxbPluralAttribute.getListIndexBase();
213215
if ( jaxbOrderColumn != null
214-
|| jaxbPluralAttribute.getClassification() == LimitedCollectionClassification.LIST ) {
216+
|| listIndexBase != null
217+
|| jaxbPluralAttribute.getClassification() == LimitedCollectionClassification.LIST ) {
218+
// apply @OrderColumn in any of these cases
215219
final OrderColumnJpaAnnotation orderColumnAnn = (OrderColumnJpaAnnotation) memberDetails.applyAnnotationUsage(
216220
JpaAnnotations.ORDER_COLUMN,
217221
xmlDocumentContext.getModelBuildingContext()
218222
);
219223

220224
if ( jaxbOrderColumn != null ) {
225+
// apply any explicit config
221226
orderColumnAnn.apply( jaxbOrderColumn, xmlDocumentContext );
222227
}
223228
}
229+
230+
if ( listIndexBase != null ) {
231+
final ListIndexBaseAnnotation annUsage = (ListIndexBaseAnnotation) memberDetails.applyAnnotationUsage(
232+
HibernateAnnotations.LIST_INDEX_BASE,
233+
xmlDocumentContext.getModelBuildingContext()
234+
);
235+
annUsage.value( listIndexBase );
236+
}
224237
}
225238
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3288,6 +3288,8 @@
32883288
<xsd:complexType/>
32893289
</xsd:element>
32903290
</xsd:choice>
3291+
<!-- @ListIndexBase -->
3292+
<xsd:element name="list-index-base" type="xsd:int" minOccurs="0"/>
32913293
<xsd:choice>
32923294
<xsd:element name="map-key" type="orm:map-key" minOccurs="0"/>
32933295
<xsd:sequence>

hibernate-core/src/test/java/org/hibernate/orm/test/collection/list/PersistentListTest.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@
1313
import org.hibernate.collection.spi.PersistentList;
1414
import org.hibernate.engine.spi.SessionFactoryImplementor;
1515
import org.hibernate.engine.spi.SessionImplementor;
16+
import org.hibernate.mapping.List;
17+
import org.hibernate.mapping.PersistentClass;
1618
import org.hibernate.persister.collection.CollectionPersister;
1719
import org.hibernate.sql.ComparisonRestriction;
1820
import org.hibernate.sql.SimpleSelect;
1921

22+
import org.hibernate.testing.orm.junit.DomainModelScope;
2023
import org.hibernate.testing.orm.junit.JiraKey;
2124
import org.hibernate.testing.orm.junit.DomainModel;
2225
import org.hibernate.testing.orm.junit.SessionFactory;
2326
import org.hibernate.testing.orm.junit.SessionFactoryScope;
2427
import org.junit.jupiter.api.Test;
2528

29+
import static org.assertj.core.api.Assertions.assertThat;
2630
import static org.junit.Assert.assertEquals;
2731
import static org.junit.Assert.assertFalse;
2832
import static org.junit.Assert.assertTrue;
@@ -37,6 +41,17 @@
3741
@SessionFactory
3842
public class PersistentListTest {
3943

44+
@Test
45+
void checkListIndexBase(DomainModelScope modelScope) {
46+
final PersistentClass listOwnerBinding = modelScope.getEntityBinding( ListOwner.class );
47+
final List childrenMapping = (List) listOwnerBinding.getProperty( "children" ).getValue();
48+
assertThat( childrenMapping.getBaseIndex() ).isEqualTo( 1 );
49+
50+
final PersistentClass orderBinding = modelScope.getEntityBinding( Order.class );
51+
final List lineItemsMapping = (List) orderBinding.getProperty( "lineItems" ).getValue();
52+
assertThat( lineItemsMapping.getBaseIndex() ).isEqualTo( 1 );
53+
}
54+
4055
@Test
4156
@JiraKey(value = "HHH-5732")
4257
public void testInverseListIndex(SessionFactoryScope scope) {
@@ -89,11 +104,11 @@ public void testInverseListIndex(SessionFactoryScope scope) {
89104
valueMap.put( name, position );
90105
}
91106
assertEquals( 2, valueMap.size() );
92-
93-
// c1 should be list index 0
94-
assertEquals( Integer.valueOf( 0 ), valueMap.get( "c1" ) );
95-
// c2 should be list index 1
96-
assertEquals( Integer.valueOf( 1 ), valueMap.get( "c2" ) );
107+
// account for list-index-base = 1
108+
// c1 should be list index 1 (0+1)
109+
assertEquals( Integer.valueOf( 1 ), valueMap.get( "c1" ) );
110+
// c2 should be list index 2 (1+1)_
111+
assertEquals( Integer.valueOf( 2 ), valueMap.get( "c2" ) );
97112
}
98113
);
99114
session2.remove( root );
@@ -151,9 +166,10 @@ public void testInverseListIndex2(SessionFactoryScope scope) {
151166
valueMap.put( prodCode, indx );
152167
}
153168
assertEquals( 3, valueMap.size() );
154-
assertEquals( Integer.valueOf( 0 ), valueMap.get( "abc" ) );
155-
assertEquals( Integer.valueOf( 1 ), valueMap.get( "def" ) );
156-
assertEquals( Integer.valueOf( 2 ), valueMap.get( "ghi" ) );
169+
// account for list-index-base = 1
170+
assertEquals( Integer.valueOf( 1 ), valueMap.get( "abc" ) );
171+
assertEquals( Integer.valueOf( 2 ), valueMap.get( "def" ) );
172+
assertEquals( Integer.valueOf( 3 ), valueMap.get( "ghi" ) );
157173
}
158174
);
159175
session2.remove( order );

hibernate-core/src/test/java/org/hibernate/orm/test/collection/original/CollectionTest.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
1414
import org.hibernate.testing.orm.junit.SessionFactory;
1515
import org.hibernate.testing.orm.junit.SessionFactoryScope;
16+
import org.junit.jupiter.api.AfterEach;
1617
import org.junit.jupiter.api.Test;
1718

1819
import jakarta.persistence.criteria.CriteriaBuilder;
@@ -21,7 +22,6 @@
2122

2223
import static org.junit.jupiter.api.Assertions.assertEquals;
2324
import static org.junit.jupiter.api.Assertions.assertFalse;
24-
import static org.junit.jupiter.api.Assertions.assertNotNull;
2525
import static org.junit.jupiter.api.Assertions.assertNull;
2626
import static org.junit.jupiter.api.Assertions.assertTrue;
2727

@@ -31,14 +31,18 @@
3131
@SuppressWarnings("JUnitMalformedDeclaration")
3232
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsNoColumnInsert.class)
3333
@DomainModel(xmlMappings = {
34-
"org/hibernate/orm/test/collection/original/UserPermissions.hbm.xml",
34+
"org/hibernate/orm/test/collection/original/UserPermissions.xml",
3535
"org/hibernate/orm/test/collection/original/Zoo.xml",
3636
})
3737
@SessionFactory
3838
public class CollectionTest {
39+
@AfterEach
40+
void dropTestData(SessionFactoryScope factoryScope) {
41+
factoryScope.dropData();
42+
}
3943

4044
@Test
41-
public void testExtraLazy(SessionFactoryScope scope) {
45+
public void testLaziness(SessionFactoryScope scope) {
4246
scope.inTransaction(
4347
s -> {
4448
User u = new User( "gavin" );
@@ -51,15 +55,13 @@ public void testExtraLazy(SessionFactoryScope scope) {
5155

5256
scope.inTransaction(
5357
s -> {
54-
User u = s.get( User.class, "gavin" );
58+
User u = s.find( User.class, "gavin" );
5559

5660
assertFalse( Hibernate.isInitialized( u.getPermissions() ) );
5761
assertEquals( 2, u.getPermissions().size() );
5862
assertTrue( u.getPermissions().contains( new Permission( "obnoxiousness" ) ) );
5963
assertFalse( u.getPermissions().contains( new Permission( "silliness" ) ) );
60-
assertNotNull( u.getPermissions().get( 1 ) );
61-
assertNull( u.getPermissions().get( 3 ) );
62-
assertFalse( Hibernate.isInitialized( u.getPermissions() ) );
64+
assertTrue( Hibernate.isInitialized( u.getPermissions() ) );
6365

6466
assertFalse( Hibernate.isInitialized( u.getSessionData() ) );
6567
assertEquals( 1, u.getSessionData().size() );
@@ -69,15 +71,12 @@ public void testExtraLazy(SessionFactoryScope scope) {
6971
assertFalse( u.getSessionData().containsValue( "bar" ) );
7072
assertEquals( "foo value", u.getSessionData().get( "foo" ) );
7173
assertNull( u.getSessionData().get( "bar" ) );
72-
assertFalse( Hibernate.isInitialized( u.getSessionData() ) );
74+
assertTrue( Hibernate.isInitialized( u.getSessionData() ) );
7375

74-
assertFalse( Hibernate.isInitialized( u.getSessionData() ) );
7576
u.getSessionData().put( "bar", "bar value" );
7677
u.getSessionAttributeNames().add( "bar" );
77-
assertFalse( Hibernate.isInitialized( u.getSessionAttributeNames() ) );
78+
assertTrue( Hibernate.isInitialized( u.getSessionAttributeNames() ) );
7879
assertTrue( Hibernate.isInitialized( u.getSessionData() ) );
79-
80-
s.remove( u );
8180
}
8281
);
8382
}

hibernate-core/src/test/java/org/hibernate/orm/test/collection/original/User.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
55
package org.hibernate.orm.test.collection.original;
6+
import java.io.Serializable;
67
import java.util.ArrayList;
78
import java.util.HashMap;
89
import java.util.HashSet;
@@ -15,43 +16,54 @@
1516
*/
1617
public class User {
1718
private String userName;
18-
private List permissions = new ArrayList();
19-
private List emailAddresses = new ArrayList();
20-
private Map sessionData = new HashMap();
21-
private Set sessionAttributeNames = new HashSet();
19+
private List<Permission> permissions = new ArrayList<>();
20+
private List<Email> emailAddresses = new ArrayList<>();
21+
private Map<String, Serializable> sessionData = new HashMap<>();
22+
private Set<String> sessionAttributeNames = new HashSet<>();
2223

2324
User() {}
25+
2426
public User(String name) {
2527
userName = name;
2628
}
27-
public List getPermissions() {
28-
return permissions;
29-
}
30-
public void setPermissions(List permissions) {
31-
this.permissions = permissions;
32-
}
29+
3330
public String getUserName() {
3431
return userName;
3532
}
33+
3634
public void setUserName(String userName) {
3735
this.userName = userName;
3836
}
39-
public List getEmailAddresses() {
37+
38+
public List<Permission> getPermissions() {
39+
return permissions;
40+
}
41+
42+
public void setPermissions(List<Permission> permissions) {
43+
this.permissions = permissions;
44+
}
45+
46+
public List<Email> getEmailAddresses() {
4047
return emailAddresses;
4148
}
42-
public void setEmailAddresses(List emailAddresses) {
49+
50+
public void setEmailAddresses(List<Email> emailAddresses) {
4351
this.emailAddresses = emailAddresses;
4452
}
45-
public Map getSessionData() {
53+
54+
public Map<String, Serializable> getSessionData() {
4655
return sessionData;
4756
}
48-
public void setSessionData(Map sessionData) {
57+
58+
public void setSessionData(Map<String, Serializable> sessionData) {
4959
this.sessionData = sessionData;
5060
}
51-
public Set getSessionAttributeNames() {
61+
62+
public Set<String> getSessionAttributeNames() {
5263
return sessionAttributeNames;
5364
}
54-
public void setSessionAttributeNames(Set sessionAttributeNames) {
65+
66+
public void setSessionAttributeNames(Set<String> sessionAttributeNames) {
5567
this.sessionAttributeNames = sessionAttributeNames;
5668
}
5769
}

hibernate-core/src/test/resources/org/hibernate/orm/test/collection/list/Mappings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
</many-to-one>
1717
<one-to-many name="children" mapped-by="parent" target-entity="ListOwner">
1818
<order-column name="list_index"/>
19+
<list-index-base>1</list-index-base>
1920
<cascade>
2021
<cascade-all/>
2122
</cascade>
@@ -32,6 +33,7 @@
3233
<basic name="code"/>
3334
<one-to-many name="lineItems" mapped-by="order">
3435
<order-column name="list_index"/>
36+
<list-index-base>1</list-index-base>
3537
<cascade>
3638
<cascade-all/>
3739
</cascade>

hibernate-core/src/test/resources/org/hibernate/orm/test/collection/original/UserPermissions.hbm.xml

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

0 commit comments

Comments
 (0)