jpql中如何设置in-clause的集合项?
JPA 2.0 是否有可能为 jpql-query 中的子句设置集合? (我正在使用 EclipseLink)
下一个示例失败:
TypedQuery<Person> q = em.createQuery("select p from Person p where p.name in (?1)", Person.class);
List<String> names = Arrays.asList(new String[] { "Bill Gates", "Steve Jobs" });
// THIS FAILS
q.setParameter(1, names);
List<Person> persons = q.getResultList();
for (Person p: persons) {
System.out.println(p.getName());
}
还有其他方法吗?
Is there a possiblity in JPA 2.0 to set a collection for in-clause in jpql-query?
(I'm using EclipseLink)
The next example fails:
TypedQuery<Person> q = em.createQuery("select p from Person p where p.name in (?1)", Person.class);
List<String> names = Arrays.asList(new String[] { "Bill Gates", "Steve Jobs" });
// THIS FAILS
q.setParameter(1, names);
List<Person> persons = q.getResultList();
for (Person p: persons) {
System.out.println(p.getName());
}
Is there another way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下是 JPA 2.0 规范中关于 IN 表达式的规定:
因此,根据规范,传递 collection_valued_input_parameter 时的正确语法是不带括号:
这适用于 EclipseLink。
Here is what the JPA 2.0 specification says about IN expressions:
So according to the specification, the correct syntax when passing a collection_valued_input_parameter is without parenthesis:
And this works with EclipseLink.
使用 EclipseLink,您需要为您的参数使用一个名称。
例如:
符号“?”使用子句“in”不起作用。它在 EclipseLink 2.5.1 中进行了测试。
Using EclipseLink, you need to use a name to your paramether.
Ex.:
The symbol "?" does not work using clause "in". It was tested in EclipseLink 2.5.1.