[ https://issues.apache.org/jira/browse/OPENJPA-2018?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13806300#comment-13806300 ]
Mark Struberg commented on OPENJPA-2018: ---------------------------------------- Romain, your latest patch uses Literal.TYPE_COLLECTION for arrays. I fear this is not a valid approach as the other direction also is used in our codebase. e.g. in criteria.Expressions line 1486 (toKernelExpression) there is still {code} .. else if (((Literal)val2).getParseType() == Literal.TYPE_COLLECTION) { Collection coll = (Collection)((Literal)val2).getValue(); {code} Of course we can just do n instanceof but I think this is kind of dirty. I wonder whether we should introduce a dedicated Literal.TYPE_ARRAY to make the code cleaner. > 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: Michael Dick > Labels: binding, criteria_api, jpa > Attachments: missingpatch.patch, OPENJPA-2018.patch, > OPENJPA-2018-test-update.patch, OPENJPA-2018-with-array.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.1#6144)