1
我試圖調用Oracle存儲過程如何使用JPA 2
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類型被定義這樣通過複雜的對象爲IN參數的陣列中的存儲過程:
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,因爲我想我的應用程序是不可知(無甲骨文依賴)。
如果它不被JPA支持,我可以使用CLOB參數而不是我的數組嗎?
問題是,我無法找到一種方法在存儲過程的參數中完全傳遞數組。最後的代碼塊是我希望它會工作的方式。哪些是傳遞這些項目的數組,但是這不起作用,據我所知。 – hishamaus 2014-11-25 04:55:33
這就是爲什麼我建議你傳遞一個List而不是一個數組。 – 2014-11-25 04:58:14
我試過了,但是我得到一個異常:type不能爲null。堆棧跟蹤完成: java.lang.IllegalArgumentException:類型不能爲空 AbstractParameterRegistrationImpl.setHibernateType(AbstractParameterRegistrationImpl.java:182) AbstractParameterRegistrationImpl。 <init>(AbstractParameterRegistrationImpl.java:131) AbstractParameterRegistrationImpl。 <init>(AbstractParameterRegistrationImpl.java:140) – hishamaus 2014-11-25 23:17:38