HHH-5370 - Building IN condition with CriteriaBuilder providing collection of values not working.
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@19930 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
b50d8268d5
commit
21b68ef40f
|
@ -88,7 +88,7 @@ public abstract class ExpressionImpl<T>
|
|||
* {@inheritDoc}
|
||||
*/
|
||||
public Predicate in(Collection<?> values) {
|
||||
return criteriaBuilder().in( this, values );
|
||||
return criteriaBuilder().in( this, values.toArray() );
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -25,11 +25,13 @@ package org.hibernate.ejb.criteria.basic;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.TypedQuery;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
import javax.persistence.criteria.Expression;
|
||||
import javax.persistence.criteria.ParameterExpression;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
@ -58,7 +60,7 @@ public class ExpressionsTest extends AbstractMetamodelSpecificTest {
|
|||
product.setId( "product1" );
|
||||
product.setPrice( 1.23d );
|
||||
product.setQuantity( 2 );
|
||||
product.setPartNumber( Integer.MAX_VALUE + 1 );
|
||||
product.setPartNumber( ((long)Integer.MAX_VALUE) + 1 );
|
||||
product.setRating( 1.999f );
|
||||
product.setSomeBigInteger( BigInteger.valueOf( 987654321 ) );
|
||||
product.setSomeBigDecimal( BigDecimal.valueOf( 987654.321 ) );
|
||||
|
@ -248,4 +250,39 @@ public class ExpressionsTest extends AbstractMetamodelSpecificTest {
|
|||
return hqlQueryImpl.getParameterMetadata().getNamedParameterNames().size();
|
||||
}
|
||||
|
||||
public void testInExplicitTupleList() {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
||||
CriteriaQuery<Product> criteria = builder.createQuery( Product.class );
|
||||
Root<Product> from = criteria.from( Product.class );
|
||||
criteria.where( from.get( Product_.partNumber ).in( Collections.singletonList( ((long)Integer.MAX_VALUE) + 1 ) ) );
|
||||
List<Product> result = em.createQuery( criteria ).getResultList();
|
||||
assertEquals( 1, result.size() );
|
||||
em.getTransaction().commit();
|
||||
em.close();
|
||||
}
|
||||
|
||||
public void testInExplicitTupleListVarargs() {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
||||
CriteriaQuery<Product> criteria = builder.createQuery( Product.class );
|
||||
Root<Product> from = criteria.from( Product.class );
|
||||
criteria.where( from.get( Product_.partNumber ).in( ((long)Integer.MAX_VALUE) + 1 ) );
|
||||
List<Product> result = em.createQuery( criteria ).getResultList();
|
||||
assertEquals( 1, result.size() );
|
||||
em.getTransaction().commit();
|
||||
em.close();
|
||||
}
|
||||
|
||||
public void testInExpressionVarargs() {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
||||
CriteriaQuery<Product> criteria = builder.createQuery( Product.class );
|
||||
Root<Product> from = criteria.from( Product.class );
|
||||
criteria.where( from.get( Product_.partNumber ).in( from.get( Product_.partNumber ) ) );
|
||||
List<Product> result = em.createQuery( criteria ).getResultList();
|
||||
assertEquals( 1, result.size() );
|
||||
em.getTransaction().commit();
|
||||
em.close();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue