HHH-7192 - NullPointerException in QueryTranslatorImpl on erroneously typed delete query
This commit is contained in:
parent
4f64b56a88
commit
8f7b8e10d0
|
@ -295,7 +295,18 @@ public abstract class AbstractEntityManagerImpl implements HibernateEntityManage
|
|||
// do the translation
|
||||
org.hibernate.Query hqlQuery = getSession().createQuery( jpaqlString );
|
||||
|
||||
// do some validation checking
|
||||
// make sure the query is a select -> HHH-7192
|
||||
final SessionImplementor session = unwrap( SessionImplementor.class );
|
||||
final HQLQueryPlan queryPlan = session.getFactory().getQueryPlanCache().getHQLQueryPlan(
|
||||
jpaqlString,
|
||||
false,
|
||||
session.getLoadQueryInfluencers().getEnabledFilters()
|
||||
);
|
||||
if ( queryPlan.getTranslators()[0].isManipulationStatement() ) {
|
||||
throw new IllegalArgumentException( "Update/delete queries cannot be typed" );
|
||||
}
|
||||
|
||||
// do some return type validation checking
|
||||
if ( Object[].class.equals( resultClass ) ) {
|
||||
// no validation needed
|
||||
}
|
||||
|
@ -304,12 +315,6 @@ public abstract class AbstractEntityManagerImpl implements HibernateEntityManage
|
|||
hqlQuery.setResultTransformer( tupleTransformer );
|
||||
}
|
||||
else {
|
||||
final SessionImplementor session = unwrap( SessionImplementor.class );
|
||||
final HQLQueryPlan queryPlan = session.getFactory().getQueryPlanCache().getHQLQueryPlan(
|
||||
jpaqlString,
|
||||
false,
|
||||
session.getLoadQueryInfluencers().getEnabledFilters()
|
||||
);
|
||||
final Class dynamicInstantiationClass = queryPlan.getDynamicInstantiationResultType();
|
||||
if ( dynamicInstantiationClass != null ) {
|
||||
if ( ! resultClass.isAssignableFrom( dynamicInstantiationClass ) ) {
|
||||
|
|
|
@ -39,6 +39,8 @@ import org.hibernate.ejb.test.Wallet;
|
|||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
@ -46,8 +48,30 @@ import static org.junit.Assert.fail;
|
|||
|
||||
/**
|
||||
* @author Emmanuel Bernard
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class QueryTest extends BaseEntityManagerFunctionalTestCase {
|
||||
@Test
|
||||
@TestForIssue( jiraKey = "HHH-7192" )
|
||||
public void testTypedManipulationQueryError() {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
||||
|
||||
try {
|
||||
em.createQuery( "delete Item", Item.class );
|
||||
fail();
|
||||
}
|
||||
catch (IllegalArgumentException expected) {
|
||||
}
|
||||
|
||||
try {
|
||||
em.createQuery( "update Item i set i.name = 'someName'", Item.class );
|
||||
fail();
|
||||
}
|
||||
catch (IllegalArgumentException expected) {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPagedQuery() throws Exception {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
|
|
Loading…
Reference in New Issue