gpt4 book ai didi

java - 使用 JPA 2.1/Hibernate 4 将值列表传递给存储过程

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:05 27 4
gpt4 key购买 nike

我有一个存储过程,它接受一个字符串列表(并遵循存储过程的限制,according to Hibernate docs):

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 实体管理器 ( a new feature in 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

并得到一个异常(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 或 Hibernate 中执行此操作的正确方法是什么?不求助于 JDBC 有可能吗?

环境:JPA 2.1、Hibernate 4.3.5、甲骨文

最佳答案

将 Integer.class 更改为 Types.INTEGER

关于java - 使用 JPA 2.1/Hibernate 4 将值列表传递给存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com