Skip to content

Commit 33b00de

Browse files
committed
HHH-9913 - NPE in org.hibernate.cache.internal.CacheDataDescriptionImpl.decode()
1 parent d885f24 commit 33b00de

File tree

4 files changed

+128
-2
lines changed

4 files changed

+128
-2
lines changed

hibernate-core/src/main/java/org/hibernate/cache/internal/CacheDataDescriptionImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ public static CacheDataDescriptionImpl decode(PersistentClass model) {
7474
model.isVersioned()
7575
? ( (VersionType) model.getVersion().getType() ).getComparator()
7676
: null,
77-
model.getIdentifierProperty().getType());
77+
model.getIdentifier().getType()
78+
);
7879
}
7980

8081
/**
@@ -91,7 +92,8 @@ public static CacheDataDescriptionImpl decode(Collection model) {
9192
model.getOwner().isVersioned()
9293
? ( (VersionType) model.getOwner().getVersion().getType() ).getComparator()
9394
: null,
94-
model.getKey().getType());
95+
model.getKey().getType()
96+
);
9597
}
9698

9799
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.test.cache.cid;
8+
9+
import java.io.Serializable;
10+
import javax.persistence.Cacheable;
11+
import javax.persistence.Entity;
12+
import javax.persistence.Id;
13+
14+
/**
15+
* @author Steve Ebersole
16+
*/
17+
@Entity
18+
@Cacheable(true)
19+
public class It implements Serializable {
20+
@Id
21+
public Integer key1;
22+
@Id
23+
public Integer key2;
24+
public String name;
25+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.test.cache.cid;
8+
9+
import java.io.Serializable;
10+
import javax.persistence.Cacheable;
11+
import javax.persistence.Entity;
12+
import javax.persistence.Id;
13+
import javax.persistence.IdClass;
14+
15+
/**
16+
* @author Steve Ebersole
17+
*/
18+
@Entity
19+
@Cacheable(true)
20+
@IdClass( ItWithPkClass.Pk.class )
21+
public class ItWithPkClass {
22+
@Id
23+
public Integer key1;
24+
@Id
25+
public Integer key2;
26+
public String name;
27+
28+
public static class Pk implements Serializable {
29+
public Integer key1;
30+
public Integer key2;
31+
}
32+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.test.cache.cid;
8+
9+
import javax.persistence.SharedCacheMode;
10+
11+
import org.hibernate.boot.MetadataSources;
12+
import org.hibernate.boot.registry.StandardServiceRegistry;
13+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
14+
import org.hibernate.cfg.AvailableSettings;
15+
16+
import org.hibernate.testing.TestForIssue;
17+
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
18+
import org.hibernate.testing.junit4.BaseUnitTestCase;
19+
import org.junit.Test;
20+
21+
/**
22+
* @author Steve Ebersole
23+
*/
24+
public class NonAggregatedCompositeIdCachingTest extends BaseUnitTestCase {
25+
26+
@Test
27+
@TestForIssue( jiraKey = "HHH-9913" )
28+
public void testNonAggregatedCompositeId() {
29+
// HHH-9913 reports a NPE when bootstrapping a SF with non-aggregated composite identifiers
30+
// in org.hibernate.cache.internal.CacheDataDescriptionImpl#decode
31+
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
32+
.applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, true )
33+
.build();
34+
35+
try {
36+
new MetadataSources( ssr )
37+
.addAnnotatedClass( It.class )
38+
.getMetadataBuilder()
39+
.applySharedCacheMode( SharedCacheMode.ENABLE_SELECTIVE )
40+
.build()
41+
.buildSessionFactory();
42+
}
43+
finally {
44+
StandardServiceRegistryBuilder.destroy( ssr );
45+
}
46+
}
47+
48+
@Test
49+
@TestForIssue( jiraKey = "HHH-9913" )
50+
public void testNonAggregatedCompositeIdWithPkClass() {
51+
// HHH-9913 reports a NPE when bootstrapping a SF with non-aggregated composite identifiers
52+
// in org.hibernate.cache.internal.CacheDataDescriptionImpl#decode
53+
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
54+
55+
try {
56+
new MetadataSources( ssr )
57+
.addAnnotatedClass( ItWithPkClass.class )
58+
.getMetadataBuilder()
59+
.applySharedCacheMode( SharedCacheMode.ENABLE_SELECTIVE )
60+
.build()
61+
.buildSessionFactory();
62+
}
63+
finally {
64+
StandardServiceRegistryBuilder.destroy( ssr );
65+
}
66+
}
67+
}

0 commit comments

Comments
 (0)