【发布时间】:2012-08-16 01:12:11
【问题描述】:
这是我的 PostgreSQL 函数:
salvarArquivoGeometricoCasoZeroPOINT
(dimensao text,tableName text,tuplas text[],srid text)
它有一个 text[] 参数,我想从我的 JPQL 向它传递一个 Java String[]:
public String salvarGeometriaCaso0(String[] tuplas,FileDto arquivo){
Query query =
em().createNativeQuery("select
salvarArquivoGeometricoCasoZeroPOINT(?1,?2,?3,?4)");
query.setParameter(1,arquivo.getGeo());//String
query.setParameter(2,arquivo.getTable());/String
query.setParameter(3,tuplas);//String[]
query.setParameter(4,arquivo.getSrid());//String
return (String) query.getSingleResult();//function returns a Text, so cast to String
}
上述代码失败,异常:
ERROR] Internal Exception: org.postgresql.util.PSQLException: Can not infer a SQL
type to use for an instance of [Ljava.lang.String;.
Use setObject () with an explicit Types value to specify the type to use.
所以我不确定如何从 EclipseLink 调用我的函数。
【问题讨论】:
-
您是否尝试过“[使用]
setObject ()使用明确的Types值来指定要使用的类型?” -
你能告诉我怎么做吗?
-
您可以在
PreparedStatement上调用setObject()而不是query.setParameter(3, tuplas)。 docs.oracle.com/javase/7/docs/api/java/sql/… -
但我使用的是 EclipseLink。我必须遵循一些模式,我不能使用 PreparedStatement。
-
哪个 EclipseLink 版本?哪个 PgJDBC 版本?我以为 EclipseLink 和 PgJDBC 理解
String[]映射到text[]。
标签: java postgresql eclipselink jpql