programing

JPA 2.1 / 최대 절전 모드 4를 사용하여 저장 프로시저에 값 목록 전달

topblog 2023. 11. 4. 09:47
반응형

JPA 2.1 / 최대 절전 모드 4를 사용하여 저장 프로시저에 값 목록 전달

문자열 목록을 포함하는 저장 프로시저가 있습니다(Hibernate 문서에 따르면 저장 프로시저에 대한 제한 사항을 따릅니다).

PROCEDURE count_active_esc(p_count OUT NUMBER, p_codes IN string_list);

어디에string_list는 사용자 지정 유형입니다.

CREATE OR REPLACE TYPE string_list IS TABLE OF VARCHAR(100)

JPA 엔티티 관리자(JPA 2.1의 새로운 기능)에서 호출하려고 합니다.

배열을 사용하려고 했습니다.

StoredProcedreQuery query = entityManager.createNamedStoredProcedureQuery("count_active_esc");
query.registerStoredProcedureParameter("p_count", Integer.class, ParameterMode.OUT);
query.registerStoredProcedureParameter("p_codes", String[].class, ParameterMode.IN);
query.setParameter("p_codes", new String[] { "AEST" });

query.getOutputParameterValue("p_count"); // <<<<< throws an exception

그리고 예외를 받았습니다.

    PLS-00306: wrong number or types of arguments in call to 'COUNT_ACTIVE_ESC'
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored

그리고 내가 목록을 통과하면:

StoredProcedreQuery query = entityManager.createNamedStoredProcedureQuery("count_active_esc");
query.registerStoredProcedureParameter("p_count", Integer.class, ParameterMode.OUT);
query.registerStoredProcedureParameter("p_codes", List.class, ParameterMode.IN); // <<<<< throws an exception
query.setParameter("p_codes", new ArrayList<String> {{ "AEST" }});

query.getOutputParameterValue("p_count");

던집니다java.lang.IllegalArgumentException: Type cannot be null

추가하기query.setHint("org.hibernate.callable", "true")도움이 되지 않았습니다.

JPA 또는 최대 절전 모드에서 이 작업을 수행하는 올바른 방법은 무엇입니까?JDBC에 의존하지 않고 가능한가요?

환경: JPA 2.1, Hibernate 4.3.5, Oracle

Integer.class를 Types로 변경합니다.INTEGER

언급URL : https://stackoverflow.com/questions/31705837/passing-a-list-of-values-to-a-stored-procedure-using-jpa-2-1-hibernate-4

반응형