我们在从应用程序调用存储过程时遇到问题.
数据库是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