【发布时间】:2014-10-26 08:20:03
【问题描述】:
我正在使用 ProcedureCall 来创建存储过程:
ProcedureCall procedure=getCurrentSession().createStoredProcedureCall("getContractServiceForContract");
procedure.registerParameter(1, ResultSet.class , ParameterMode.REF_CURSOR);
procedure.registerParameter(2, Integer.class, ParameterMode.IN);
procedure.registerParameter(3, Integer.class, ParameterMode.IN);
procedure.registerParameter(4, Integer.class, ParameterMode.IN);
procedure.getParameterRegistration(2).bindValue(contractId);
procedure.getParameterRegistration(3).bindValue(month);
procedure.getParameterRegistration(4).bindValue(year);
在这之后我有:
ResultSetOutput rso=(ResultSetOutput) procedure.getOutputs().getCurrent();
但是
getCurrent();
抛出异常:
java.lang.UnsupportedOperationException: org.hibernate.dialect.Oracle10gDialect does not support resultsets via stored procedures
我尝试使用表达式:
ResultSetOutput rso=(ResultSetOutput)procedure.getOutputs().getOutputParameterValue(1);
但我又遇到了异常:
org.hibernate.procedure.ParameterMisuseException: REF_CURSOR parameters should be accessed via results
任何想法如何使这项工作?我的程序开始于:
PROCEDURE getContractServiceForContract
(
pResultValue OUT PROCTYPES.ref_cursor,
pContractID IN INT,
pMonth IN INT,
pYear IN INT,
pIsLoadByAccountingPeriod IN INT default 0
) AS
yearMin int;
yearMax int;
monthMin int;
monthMax int;
vContractIDs t_num_ids_tab; --holds event id's
vContractServIDs t_num_ids_tab; --holds event id's
BEGIN ...
【问题讨论】:
-
请在此处找到解决该问题的方法blog.harpoontech.com/2013/05/…
-
blog.harpoontech.com/2013/05/… 这里有 > CallableStatement cs = connection.prepareCall("call jay_proc(?)");但我想使用 ProcedureCall,因为我不能使用 Connection 变量来声明 CallableStatement。连接正在我的应用程序的核心中建立,所以我不想访问它。
标签: java spring oracle hibernate stored-procedures