【发布时间】:2018-02-26 14:36:50
【问题描述】:
我正在尝试在 eclipselink JPA 中使用 in 子句,但没有任何效果
final String parameterizedQuery = "Select * FROM sap.Preco WHERE cliente_id = ?clienteId and numero_material in ( ?numeroMaterial )";
listPreco = em.createNativeQuery(parameterizedQuery)
.setParameter("clienteId", clienteId).setParameter("numeroMaterial", produtoId)
.getResultList();
produtoId id 是一个以逗号分隔的字符串
String produtoId = StringUtils.join(listMaterial, "','");
或
String produtoId = StringUtils.join(listMaterial, ",");
两者都不起作用,这是日志:
选择 * FROM sap.Preco WHERE cliente_id = ?和 (?) 中的 numero_material 绑定 => [0000006775, 000000000000100003,000000000000100003]
已经尝试使用列表作为参数但不起作用。
内部异常:org.postgresql.util.PSQLException:无法推断要用于 java.util.ArrayList 实例的 SQL 类型。使用带有特定值类型的 setObject() 来指定要使用的类型。
【问题讨论】:
-
为什么使用原生 SQL 查询而不是 JPQL?这在 JPQL 中得到支持,它将分解列表并将每个项目添加到生成的 SQL 中,但对于原生 SQL 查询,您必须自己单独添加每个项目。或者将其添加到 SQL 语句内联,但这会使您面临 SQL 注入攻击。
标签: java sql jpa eclipselink