diff --git a/hibernate-core/src/main/java/org/hibernate/query/criteria/internal/compile/CriteriaQueryTypeQueryAdapter.java b/hibernate-core/src/main/java/org/hibernate/query/criteria/internal/compile/CriteriaQueryTypeQueryAdapter.java index cab7a6757350..057969bfc587 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/criteria/internal/compile/CriteriaQueryTypeQueryAdapter.java +++ b/hibernate-core/src/main/java/org/hibernate/query/criteria/internal/compile/CriteriaQueryTypeQueryAdapter.java @@ -370,7 +370,10 @@ private ExplicitParameterInfo resolveParameterInfo(Parameter param) { return (ExplicitParameterInfo) param; } else if ( ParameterExpression.class.isInstance( param ) ) { - return explicitParameterInfoMap.get( param ); + ExplicitParameterInfo parameterInfo = explicitParameterInfoMap.get( param ); + if ( parameterInfo != null ) { + return parameterInfo; + } } else { for ( ExplicitParameterInfo parameterInfo : explicitParameterInfoMap.values() ) { diff --git a/hibernate-core/src/test/java/org/hibernate/jpa/test/criteria/CriteriaQueryTypeQueryAdapterTest.java b/hibernate-core/src/test/java/org/hibernate/jpa/test/criteria/CriteriaQueryTypeQueryAdapterTest.java index ce0be39508ba..499c2b69c4de 100644 --- a/hibernate-core/src/test/java/org/hibernate/jpa/test/criteria/CriteriaQueryTypeQueryAdapterTest.java +++ b/hibernate-core/src/test/java/org/hibernate/jpa/test/criteria/CriteriaQueryTypeQueryAdapterTest.java @@ -113,6 +113,22 @@ public void testCriteriaQueryGetNonExistingParameter() { } ); } + @Test(expected = IllegalArgumentException.class) + @TestForIssue(jiraKey = "HHH-13932") + public void testCriteriaQuerySetNonExistingParameter() { + doInJPA( this::entityManagerFactory, entityManager -> { + CriteriaBuilder builder = entityManager.getCriteriaBuilder(); + CriteriaQuery query = builder.createQuery( Item.class ); + Root root = query.from( Item.class ); + ParameterExpression parameter = builder.parameter( String.class, "name" ); + Predicate predicate = builder.equal( root.get( "name" ), parameter ); + query.where( predicate ); + TypedQuery criteriaQuery = entityManager.createQuery( query ); + ParameterExpression nonExistingParam = builder.parameter( String.class, "nonExistingParam" ); + criteriaQuery.setParameter( nonExistingParam, "George" ); + } ); + } + @Test public void testSetParameterPassingTypeNotFails() { doInJPA( this::entityManagerFactory, entityManager -> {