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