Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用jpa将数组参数传递给postgresql函数?_Java_Hibernate_Postgresql_Jpa_Eclipselink - Fatal编程技术网

Java 如何使用jpa将数组参数传递给postgresql函数?

Java 如何使用jpa将数组参数传递给postgresql函数?,java,hibernate,postgresql,jpa,eclipselink,Java,Hibernate,Postgresql,Jpa,Eclipselink,有人能告诉我如何使用EclipseLink(JPA2.1)将数组参数传递给postgresql函数吗? 我尝试了以下操作,但出现错误: 例外情况 org.postgresql.util.PSQLException:无法推断要用于的SQL类型 [Ljava.lang.Integer;的实例。请将setObject()与显式 类型值以指定要使用的类型 谢谢我解决了这个问题 我需要将二维字符串数组(string[][])作为参数传递给PostgreSQL函数 我所做的是将完整数组转换为字符串,然后用完

有人能告诉我如何使用EclipseLink(JPA2.1)将数组参数传递给postgresql函数吗? 我尝试了以下操作,但出现错误:

例外情况

org.postgresql.util.PSQLException:无法推断要用于的SQL类型 [Ljava.lang.Integer;的实例。请将setObject()与显式 类型值以指定要使用的类型


谢谢

我解决了这个问题

我需要将二维字符串数组(string[][])作为参数传递给PostgreSQL函数

我所做的是将完整数组转换为字符串,然后用完整字符串中的大括号替换方括号,如下所示:

  query.setParameter(22, Arrays.deepToString(detalles_pedido).replace('[', '{').replace(']', '}')); 
然后,在我的PostgreSQL函数中,我将收到的参数类型更改为TEXT,并且我能够在PostgreSQL函数中使用以下指令将文本转换为数组variableName::TEXT[][]

validacion := 0;    
FOREACH detalle SLICE 1 IN ARRAY set_detalles::text[][] LOOP    
    oidDetalle = uuid_generate_v4();
    SELECT "Oid" INTO productoID FROM public.cat_producto WHERE  descripcion = detalle[1];
    SELECT precio_unitario INTO precioUnitario FROM public.cat_producto WHERE  descripcion = detalle[1];

    SELECT count(dblink) INTO validacion FROM (SELECT dblink('dblink_trans', 'INSERT INTO public.detalle_pedido ("Oid", pedido_id , producto_id, cantidad, surtido, precio, "OptimisticLockField", "GCRecord") VALUES (''' || oidDetalle || ''',''' || Oid || ''',''' || productoID || ''', '|| detalle[2] || ', false,'|| precioUnitario || ', 0, null);')::TEXT) AS insercion;                    
END LOOP;

这对我来说真的很好。

而且可能会对你有所帮助。谢谢@ankur,链接已满。这是否解决了你的问题,那么我应该发布这篇文章作为你接受的答案是的。它给了我一个主意。我没有将数组传递给函数,而是传递了一个字符串,并用逗号分隔整数。然后,我使用字符串\u to \u arr将字符串拆分为一个数组。谢谢,回答已发布,请接受
validacion := 0;    
FOREACH detalle SLICE 1 IN ARRAY set_detalles::text[][] LOOP    
    oidDetalle = uuid_generate_v4();
    SELECT "Oid" INTO productoID FROM public.cat_producto WHERE  descripcion = detalle[1];
    SELECT precio_unitario INTO precioUnitario FROM public.cat_producto WHERE  descripcion = detalle[1];

    SELECT count(dblink) INTO validacion FROM (SELECT dblink('dblink_trans', 'INSERT INTO public.detalle_pedido ("Oid", pedido_id , producto_id, cantidad, surtido, precio, "OptimisticLockField", "GCRecord") VALUES (''' || oidDetalle || ''',''' || Oid || ''',''' || productoID || ''', '|| detalle[2] || ', false,'|| precioUnitario || ', 0, null);')::TEXT) AS insercion;                    
END LOOP;