mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-27 14:30:16 +00:00
HHH-9856 - EntityManager.find() and getReference() throw incorrect exception for non-entity
This commit is contained in:
parent
2b89553db5
commit
0ea03fd9a4
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||||
|
*/
|
||||||
|
package org.hibernate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates an attempt was made to refer to an unknown entity name/class.
|
||||||
|
* <p/>
|
||||||
|
* NOTE : extends MappingException because that's what core used to do and that's how
|
||||||
|
* HEM expectes it. Longer term I think it makes more sense to have a different
|
||||||
|
* hierarchy for runtime-"mapping" exceptions.
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class UnknownEntityTypeException extends MappingException {
|
||||||
|
public UnknownEntityTypeException(String message, Throwable cause) {
|
||||||
|
super( message, cause );
|
||||||
|
}
|
||||||
|
|
||||||
|
public UnknownEntityTypeException(String message) {
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
}
|
@ -289,7 +289,7 @@ public interface SessionFactoryImplementor extends Mapping, SessionFactory {
|
|||||||
*
|
*
|
||||||
* @return The located EntityPersister, never {@code null}
|
* @return The located EntityPersister, never {@code null}
|
||||||
*
|
*
|
||||||
* @throws HibernateException If a matching EntityPersister cannot be located
|
* @throws org.hibernate.UnknownEntityTypeException If a matching EntityPersister cannot be located
|
||||||
*/
|
*/
|
||||||
EntityPersister locateEntityPersister(Class byClass);
|
EntityPersister locateEntityPersister(Class byClass);
|
||||||
|
|
||||||
@ -300,7 +300,7 @@ public interface SessionFactoryImplementor extends Mapping, SessionFactory {
|
|||||||
*
|
*
|
||||||
* @return The located EntityPersister, never {@code null}
|
* @return The located EntityPersister, never {@code null}
|
||||||
*
|
*
|
||||||
* @throws HibernateException If a matching EntityPersister cannot be located
|
* @throws org.hibernate.UnknownEntityTypeException If a matching EntityPersister cannot be located
|
||||||
*/
|
*/
|
||||||
EntityPersister locateEntityPersister(String byName);
|
EntityPersister locateEntityPersister(String byName);
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
import org.hibernate.StatelessSessionBuilder;
|
import org.hibernate.StatelessSessionBuilder;
|
||||||
import org.hibernate.Transaction;
|
import org.hibernate.Transaction;
|
||||||
import org.hibernate.TypeHelper;
|
import org.hibernate.TypeHelper;
|
||||||
|
import org.hibernate.UnknownEntityTypeException;
|
||||||
import org.hibernate.boot.cfgxml.spi.CfgXmlAccessService;
|
import org.hibernate.boot.cfgxml.spi.CfgXmlAccessService;
|
||||||
import org.hibernate.boot.cfgxml.spi.LoadedConfig;
|
import org.hibernate.boot.cfgxml.spi.LoadedConfig;
|
||||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
@ -781,7 +782,7 @@ public EntityPersister locateEntityPersister(Class byClass) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( entityPersister == null ) {
|
if ( entityPersister == null ) {
|
||||||
throw new HibernateException( "Unable to locate persister: " + byClass.getName() );
|
throw new UnknownEntityTypeException( "Unable to locate persister: " + byClass.getName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return entityPersister;
|
return entityPersister;
|
||||||
@ -791,7 +792,7 @@ public EntityPersister locateEntityPersister(Class byClass) {
|
|||||||
public EntityPersister locateEntityPersister(String byName) {
|
public EntityPersister locateEntityPersister(String byName) {
|
||||||
final EntityPersister entityPersister = entityPersisters.get( byName );
|
final EntityPersister entityPersister = entityPersisters.get( byName );
|
||||||
if ( entityPersister == null ) {
|
if ( entityPersister == null ) {
|
||||||
throw new HibernateException( "Unable to locate persister: " + byName );
|
throw new UnknownEntityTypeException( "Unable to locate persister: " + byName );
|
||||||
}
|
}
|
||||||
return entityPersister;
|
return entityPersister;
|
||||||
}
|
}
|
||||||
|
@ -8,13 +8,16 @@
|
|||||||
|
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.Transaction;
|
import org.hibernate.Transaction;
|
||||||
|
import org.hibernate.UnknownEntityTypeException;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
@ -45,6 +48,52 @@ public void testMix() throws Exception {
|
|||||||
s.close();
|
s.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue( jiraKey = "HHH-9856" )
|
||||||
|
public void testGetAndFindNonEntityThrowsIllegalArgumentException() {
|
||||||
|
try {
|
||||||
|
sessionFactory().locateEntityPersister( Cellular.class );
|
||||||
|
}
|
||||||
|
catch (UnknownEntityTypeException ignore) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
sessionFactory().locateEntityPersister( Cellular.class.getName() );
|
||||||
|
}
|
||||||
|
catch (UnknownEntityTypeException ignore) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
|
||||||
|
Session s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
try {
|
||||||
|
s.get( Cellular.class, 1 );
|
||||||
|
fail( "Expecting a failure" );
|
||||||
|
}
|
||||||
|
catch (UnknownEntityTypeException ignore) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
s = openSession();
|
||||||
|
s.beginTransaction();
|
||||||
|
try {
|
||||||
|
s.get( Cellular.class.getName(), 1 );
|
||||||
|
fail( "Expecting a failure" );
|
||||||
|
}
|
||||||
|
catch (UnknownEntityTypeException ignore) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class[] getAnnotatedClasses() {
|
protected Class[] getAnnotatedClasses() {
|
||||||
return new Class[]{
|
return new Class[]{
|
||||||
|
@ -10,9 +10,12 @@
|
|||||||
|
|
||||||
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
@ -31,6 +34,24 @@ public void testSubclassWrongId() throws Exception {
|
|||||||
em.close();
|
em.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue( jiraKey = "HHH-9856" )
|
||||||
|
public void testNonEntity() {
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
try {
|
||||||
|
em.find( String.class, 1 );
|
||||||
|
fail( "Expecting a failure" );
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ignore) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class[] getAnnotatedClasses() {
|
public Class[] getAnnotatedClasses() {
|
||||||
return new Class[] {
|
return new Class[] {
|
||||||
|
@ -15,12 +15,14 @@
|
|||||||
import org.hibernate.jpa.internal.EntityManagerFactoryImpl;
|
import org.hibernate.jpa.internal.EntityManagerFactoryImpl;
|
||||||
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Gavin King
|
* @author Gavin King
|
||||||
@ -106,6 +108,24 @@ private void assertFetchCount(int count) {
|
|||||||
assertEquals( count, fetches );
|
assertEquals( count, fetches );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue( jiraKey = "HHH-9856" )
|
||||||
|
public void testNonEntity() {
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
try {
|
||||||
|
em.getReference( String.class, 1 );
|
||||||
|
fail( "Expecting a failure" );
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ignore) {
|
||||||
|
// expected
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings( {"unchecked"})
|
@SuppressWarnings( {"unchecked"})
|
||||||
protected void addConfigOptions(Map options) {
|
protected void addConfigOptions(Map options) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user