gpt4 book ai didi

java - 如何在jpql中为in-clause设置集合项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:39 28 4
gpt4 key购买 nike

在 JPA 2.0 中是否有可能为 jpql-query 中的 in-clause 设置一个集合?(我正在使用 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());
}

还有其他方法吗?

最佳答案

JPA 2.0 规范对 IN 表达式的描述如下:

4.6.9 In Expressions

The syntax for the use of the comparison operator [NOT] IN in a conditional expression is as follows:

in_expression ::=
{state_field_path_expression | type_discriminator} [NOT] IN
{ ( in_item {, in_item}* ) | (subquery) | collection_valued_input_parameter }
in_item ::= literal | single_valued_input_parameter

...

因此根据规范,传递 collection_valued_input_parameter 时的正确语法是不带括号的:

select p from Person p where p.name in ?1

这适用于 EclipseLink。

关于java - 如何在jpql中为in-clause设置集合项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3879589/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com