将列表作为参数传递给 JPQL 命名查询不起作用
Pass a list as a parameter to JPQL named query not working
我有一个以这种方式声明的 JPQL 命名查询:
@NamedQuery(name = "Client.findByInternalIds", query =
"select o from Client o where o.internalId in (:internalIds)")
这里,:internalIds
应该是我在运行时作为参数传递给命名查询的列表。每当我尝试这样做时都会出现问题:
@Override
public List<Client> getClientsByInternalIds(List<Integer> internalIds) {
TypedQuery<Client> nq = em.createNamedQuery("Client.findByInternalIds", Client.class);
nq.setParameter("internalIds", internalIds);
return nq.getResultList();
}
我基本上得到这个错误(例外)
java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList
for parameter internalIds with expected type of class
java.lang.Integer from query string select o from Client o where
o.internalId in (:internalIds)
我在网上搜索了一个解决方案,似乎所有人都说我的语法是正确的,请问谁能帮我解决这个问题吗?谢谢。
仅供参考,使用 WebLogic 12c 和 EclipseLink。
实际上我的语法不正确,经过多次尝试,简单的解决方案是删除 @NamedQuery
定义中 internalIds
参数的括号。
所以 @NamedQuery
变成这样:
@NamedQuery(name = "Client.findByInternalIds", query =
"select o from Client o where o.internalId in :internalIds")
而且有效!
我有一个以这种方式声明的 JPQL 命名查询:
@NamedQuery(name = "Client.findByInternalIds", query =
"select o from Client o where o.internalId in (:internalIds)")
这里,:internalIds
应该是我在运行时作为参数传递给命名查询的列表。每当我尝试这样做时都会出现问题:
@Override
public List<Client> getClientsByInternalIds(List<Integer> internalIds) {
TypedQuery<Client> nq = em.createNamedQuery("Client.findByInternalIds", Client.class);
nq.setParameter("internalIds", internalIds);
return nq.getResultList();
}
我基本上得到这个错误(例外)
java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter internalIds with expected type of class java.lang.Integer from query string select o from Client o where o.internalId in (:internalIds)
我在网上搜索了一个解决方案,似乎所有人都说我的语法是正确的,请问谁能帮我解决这个问题吗?谢谢。
仅供参考,使用 WebLogic 12c 和 EclipseLink。
实际上我的语法不正确,经过多次尝试,简单的解决方案是删除 @NamedQuery
定义中 internalIds
参数的括号。
所以 @NamedQuery
变成这样:
@NamedQuery(name = "Client.findByInternalIds", query =
"select o from Client o where o.internalId in :internalIds")
而且有效!