From fd511c0a73d2e7c46715d0b023e7063794c11e55 Mon Sep 17 00:00:00 2001 From: Jan Schatteman Date: Wed, 9 Jul 2025 16:53:54 +0200 Subject: [PATCH 1/2] HHH-19582 - Fix NPE Signed-off-by: Jan Schatteman --- .../internal/util/collections/AbstractPagedArray.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hibernate-core/src/main/java/org/hibernate/internal/util/collections/AbstractPagedArray.java b/hibernate-core/src/main/java/org/hibernate/internal/util/collections/AbstractPagedArray.java index 976fd704cd72..eff754a70d8e 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/util/collections/AbstractPagedArray.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/util/collections/AbstractPagedArray.java @@ -176,7 +176,9 @@ protected Page getOrCreateEntryPage(int index) { public void clear() { for ( Page entryPage : elementPages ) { - entryPage.clear(); + if ( entryPage != null ) { + entryPage.clear(); + } } elementPages.clear(); elementPages.trimToSize(); From c0a449d74f80d0d437852d07d144e6fc4126f251 Mon Sep 17 00:00:00 2001 From: Jan Schatteman Date: Wed, 9 Jul 2025 16:54:31 +0200 Subject: [PATCH 2/2] HHH-19582 - Add test for issue Signed-off-by: Jan Schatteman --- .../orm/test/util/InstanceIdentityMapTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/util/InstanceIdentityMapTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/util/InstanceIdentityMapTest.java index 1c5f79fcd403..74323dc122b5 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/util/InstanceIdentityMapTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/util/InstanceIdentityMapTest.java @@ -6,6 +6,7 @@ import org.hibernate.engine.spi.InstanceIdentity; import org.hibernate.internal.util.collections.InstanceIdentityMap; +import org.hibernate.testing.orm.junit.Jira; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; @@ -99,4 +100,15 @@ public void testSets() { assertThat( testMap.values() ).hasSize( 100 ).containsAll( map.values() ); assertThat( testMap.entrySet() ).hasSize( 100 ).containsAll( map.entrySet() ); } + + @Test + @Jira(value = "https://hibernate.atlassian.net/browse/HHH-19582") + public void testNullPage() { + final TestInstance i1 = new TestInstance( 9999 ); + testMap.put( i1, "instance_X" ); + + testMap.clear(); + assertThat( testMap ).isEmpty(); + } + }