如何使用JPA 2将复杂对象数组作为IN参数传递给存储过程

时间:2014-11-25 01:53:20

标签: 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) is
...
begin
...
end

complex_list__t类型定义如下:

create or replace 
type complex_list__t is table of simple_list__t

simple_list__t类型定义如下:

create or replace 
type simple_list__t  is table of varchar2(2000)

我想使用JPA 2调用此过程。我不确定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参数代替我的数组吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试传递

List<MyComplexObject> 

而不是它们的数组。如果这不起作用,您可以尝试

List<List<String>>

而不是其中之一。