Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 如何使用JPA2在存储过程中将复杂对象数组作为IN参数传递_Java_Arrays_Jpa_Stored Procedures_Clob - Fatal编程技术网

Java 如何使用JPA2在存储过程中将复杂对象数组作为IN参数传递

Java 如何使用JPA2在存储过程中将复杂对象数组作为IN参数传递,java,arrays,jpa,stored-procedures,clob,Java,Arrays,Jpa,Stored Procedures,Clob,我正在尝试调用Oracle存储过程 create or replace procedure save_item ( item_arr__p in complex_list__t, status__p out varchar2, status_message__p out varchar2) i

我正在尝试调用Oracle存储过程

create or replace 
  procedure save_item (
                            item_arr__p in     complex_list__t,
                            status__p           out varchar2,
                            status_message__p   out varchar2) is
...
begin
...
end
复杂列表类型的定义如下:

create or replace 
type complex_list__t is table of simple_list__t
create or replace 
type simple_list__t  is table of varchar2(2000)
简单列表类型的定义如下:

create or replace 
type complex_list__t is table of simple_list__t
create or replace 
type simple_list__t  is table of varchar2(2000)
我想用JPA2调用这个过程。我不确定JPA是否支持数组作为参数。 我希望能够做到这一点:

StoredProcedureQuery query = em.createNamedStoredProcedureQuery("pkg_api_wd_item.save_item");
query.registerStoredProcedureParameter("item_arr__p", MyComplexObject[].class, ParameterMode.IN);
query.registerStoredProcedureParameter("status__p", String.class, ParameterMode.OUT);
query.registerStoredProcedureParameter("status_message__p", String.class, ParameterMode.OUT);

query.setParameter("item_arr__p", myobjects);
query.execute();

String status = (String) query.getOutputParameterValue("status__p");
String message = (String) query.getOutputParameterValue("status_message__p");
我真的很想使用JPA,因为我希望我的应用程序是不可知的,没有oracle依赖关系


如果JPA不支持,我可以使用CLOB参数代替数组吗

你可以试着通过一个

List<MyComplexObject> 
而不是它们的数组。如果这不起作用,你可以试试

List<List<String>>

问题是我找不到一种方法在存储过程的参数中传递一个数组。最后一个代码块是我所希望的工作方式。它正在传递这些项的数组,但就我所知,它不起作用。这就是我建议您传递列表而不是数组的原因。我尝试了,但我得到了一个异常:type不能为null。堆栈跟踪完成:java.lang.IllegalArgumentException:类型不能为null AbstractParameterRegistrationImpl.setHibernateTypeAbstractParameterRegistrationImpl.java:182 AbstractParameterRegistrationImpl.initAbstractParameterRegistrationImpl.java:131 AbstractParameterRegistrationImpl.initAbstractParameterRegistrationImpl.java:140您看到了吗找到方法吗?不幸的是没有。我们必须请求直接表访问。