Java 如何使用JPA2在存储过程中将复杂对象数组作为IN参数传递
我正在尝试调用Oracle存储过程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
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您看到了吗找到方法吗?不幸的是没有。我们必须请求直接表访问。