小编Har*_*uka的帖子

如何使用实体管理器调用具有多个输入和输出参数的存储过程

我们在从应用程序调用存储过程时遇到问题.数据库是oracle 10g 这个proc有2个输入参数和2个输出参数.

输入1: - DB-List输入2: - 字符串

输出1: - 更新DB-List输出2: - 数字

当我们尝试使用时

 Query q = session.createSQLQuery("{call proc_name(?,?,?,?)}");
Run Code Online (Sandbox Code Playgroud)

我们无法区分in参数和out参数.那么我们应该如何使用它来处理它.

另外,我们尝试使用可调用语句如下:

Session session = (Session) getEntityManager().getDelegate();
SessionImpl sessionImpl = ((SessionImpl) getEntityManager().getDelegate());
Connection cc = sessionImpl.connection();
CallableStatement callableStatement = null;

callableStatement = cc.prepareCall("{call proc_name(?,?,?,?)}");
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("DB_LIST",callableStatement.getConnection());
ARRAY paramArray = new ARRAY(descriptor, callableStatement.getConnection(), array);
callableStatement.setArray(1, paramArray);
callableStatement.setString(2, "N");
callableStatement.registerOutParameter(3, OracleTypes.ARRAY, "DB_RETURN_LIST");
callableStatement.registerOutParameter(4, Types.INTEGER);
// executing the query
callableStatement.execute();
Run Code Online (Sandbox Code Playgroud)

我们收到以下错误:

javax.ejb.EJBException: java.lang.ClassCastException: 
$Proxy50 cannot be cast …
Run Code Online (Sandbox Code Playgroud)

java stored-procedures ejb jpa java-ee-6

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

ejb ×1

java ×1

java-ee-6 ×1

jpa ×1

stored-procedures ×1