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

我们在从应用程序调用存储过程时遇到问题.

数据库是oracle 10g

该proc有2个输入参数和2个输出参数.

输入1: – DB-List

输入2: – 字符串

输出1: – 一个DB-List

输出2: – 数字

当我们尝试使用时

Query q = session.createSQLQuery("{call proc_name(?,?,?,?)}");

我们无法区分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();

我们收到以下错误:

javax.ejb.EJBException: java.lang.ClassCastException:

$Proxy50 cannot be cast to oracle.jdbc.OracleConnection

你能提供一些建议吗?

这是我们正在使用的实体管理器

public abstract class GenericDAO implements IGenericDAO {

private final Class persistentClass;

@PersistenceContext(unitName = "firstPersistenceUnit")

@Produces

private EntityManager entityManager;

public void setEntityManager(final EntityManager entityManager) throws DataAccessException {

this.entityManager = entityManager;

}

public EntityManager getEntityManager() throws DataAccessException {

return entityManager;

}

}

这是Persistance.xml中的条目

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

org.hibernate.ejb.HibernatePersistence

java:jboss/firstDataSource

com.domain.Branch

true

ENABLE_SELECTIVE

AUTO

org.hibernate.ejb.HibernatePersistence

java:jboss/secondDataSource

com.domain.PocJeeCounty

true

ENABLE_SELECTIVE

AUTO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值