Skip to content

Commit 379e32e

Browse files
committed
HHH-11762 - PersistenceUnitUtilImpl#getIdentifier throws MappingException for non-entity
1 parent ec16529 commit 379e32e

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

hibernate-core/src/main/java/org/hibernate/jpa/internal/PersistenceUnitUtilImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import javax.persistence.spi.LoadState;
1212

1313
import org.hibernate.Hibernate;
14+
import org.hibernate.MappingException;
1415
import org.hibernate.engine.spi.EntityEntry;
1516
import org.hibernate.engine.spi.ManagedEntity;
1617
import org.hibernate.engine.spi.SessionFactoryImplementor;
@@ -92,9 +93,15 @@ else if ( entity instanceof ManagedEntity ) {
9293

9394
private Object getIdentifierFromPersister(Object entity) {
9495
Class<?> entityClass = Hibernate.getClass( entity );
95-
EntityPersister persister = sessionFactory.getMetamodel().entityPersister( entityClass );
96-
if ( persister == null ) {
97-
throw new IllegalArgumentException( entityClass.getName() + " is not an entity" );
96+
final EntityPersister persister;
97+
try {
98+
persister = sessionFactory.getMetamodel().entityPersister( entityClass );
99+
if ( persister == null ) {
100+
throw new IllegalArgumentException( entityClass.getName() + " is not an entity" );
101+
}
102+
}
103+
catch (MappingException ex) {
104+
throw new IllegalArgumentException( entityClass.getName() + " is not an entity", ex );
98105
}
99106
return persister.getIdentifier( entity, null );
100107
}

hibernate-core/src/test/java/org/hibernate/jpa/test/factory/puUtil/GetIdentifierTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.junit.Before;
1616
import org.junit.Test;
1717

18+
import static org.junit.Assert.fail;
19+
1820
/**
1921
* @author Steve Ebersole
2022
*/
@@ -51,6 +53,28 @@ public void getIdentifierTest() throws Exception {
5153
entityManager.close();
5254
}
5355

56+
@Test
57+
public void getIdentifierOfNonEntityTest() {
58+
try {
59+
entityManagerFactory().getPersistenceUnitUtil().getIdentifier( this );
60+
fail( "should have thrown IllegalArgumentException" );
61+
}
62+
catch (IllegalArgumentException ex) {
63+
// expected
64+
}
65+
}
66+
67+
@Test
68+
public void getIdentifierOfNullTest() {
69+
try {
70+
entityManagerFactory().getPersistenceUnitUtil().getIdentifier( null );
71+
fail( "should have thrown IllegalArgumentException" );
72+
}
73+
catch (IllegalArgumentException ex) {
74+
// expected
75+
}
76+
}
77+
5478
private NestedLegacyEntity createExisitingNestedLegacyEntity() {
5579

5680
ModernEntity modernEntity = new ModernEntity();

0 commit comments

Comments
 (0)