[ https://issues.apache.org/jira/browse/OPENJPA-2018?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13924055#comment-13924055 ]
Oliver Gierke commented on OPENJPA-2018: ---------------------------------------- This still seems to be broken for in 2.3.0 in case you refer to the parameter by name. This works: CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class); Root<User> root = criteriaQuery.from(User.class); ParameterExpression<Collection> parameter = builder.parameter(Collection.class); criteriaQuery.where(root.<Integer> get("id").in(parameter)); TypedQuery<User> query = em.createQuery(criteriaQuery); query.setParameter(parameter, Arrays.asList(1, 2)); List<User> resultList = query.getResultList(); this doesn't: CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class); Root<User> root = criteriaQuery.from(User.class); criteriaQuery.where(root.<Integer> get("id").in(builder.parameter(Collection.class, "ids"))); TypedQuery<User> query = em.createQuery(criteriaQuery); query.setParameter("ids", Arrays.asList(1, 2)); List<User> resultList = query.getResultList(); The latter again fails with the exception: Filter invalid. Cannot compare field id of type java.lang.Integer to value of type java.util.List. Numeric comparisons must be between numeric types only. To enable such comparisons for backwards-compatibility, add "QuotedNumbersInQueries=true" to the org.apache.openjpa.Compatibility setting in your configuration.; nested exception is <openjpa-2.3.0-r422266:1540826 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Filter invalid. Cannot compare field id of type java.lang.Integer to value of type java.util.Collection. Numeric comparisons must be between numeric types only. To enable such comparisons for backwards-compatibility, add "QuotedNumbersInQueries=true" to the org.apache.openjpa.Compatibility setting in your configuration. > Cannot bind String[] to ParameterExpression for path.in(parameter) > ------------------------------------------------------------------ > > Key: OPENJPA-2018 > URL: https://issues.apache.org/jira/browse/OPENJPA-2018 > Project: OpenJPA > Issue Type: Bug > Components: jpa > Affects Versions: 2.1.0 > Reporter: Oliver Gierke > Assignee: Mark Struberg > Labels: binding, criteria_api, jpa > Fix For: 2.3.0 > > Attachments: OPENJPA-2018-test-update.patch, > OPENJPA-2018-test2.patch, OPENJPA-2018-with-array.patch, OPENJPA-2018.patch, > missingpatch.patch, openjpa-2018.zip > > > Given the following code: > {code} > User user = new User("Dave", "Matthews", "f...@bar.de"); > em.persist(user); > em.flush(); > CriteriaBuilder builder = em.getCriteriaBuilder(); > CriteriaQuery<User> criteria = builder.createQuery(User.class); > Root<User> root = criteria.from(User.class); > criteria.where(root.get("firstname").in(builder.parameter(String[].class))); > TypedQuery<User> query = em.createQuery(criteria); > for (ParameterExpression parameter : criteria.getParameters()) { > query.setParameter(parameter, new String[] {"Dave", "Carter"}); > } > List<User> result = query.getResultList(); > assertThat(result.isEmpty(), is(false)); > {code} > I get a > {code} > <openjpa-2.0.0-r422266:935683 nonfatal user error> > org.apache.openjpa.persistence.ArgumentException: The specified parameter of > type "class [Ljava.lang.String;" is not a valid query parameter. > {code} > Using {{Collection}} as {{ParameterExpression}} type and binding the > parameters via {{Arrays.asList(...)}} works fine. -- This message was sent by Atlassian JIRA (v6.2#6252)