【发布时间】:2016-03-27 21:53:12
【问题描述】:
我试图在 HsqlDB 中调用一个存储过程并返回一个结果集
我的存储过程如下
CREATE PROCEDURE p_getTeamTasksForLastXDays(IN teamId BIGINT, IN numberOfDays BIGINT) READS SQL DATA
DYNAMIC RESULT SETS 1
BEGIN ATOMIC
declare curs cursor for select taskId, taskName from V_TASK_DETAILS;
open curs;
END;
/;
我用来调用这个proc的Java和hibernate代码如下
public void getTaskExecutionLogs(Long teamId, Long numberOfDays) {
LOG.info("Entered getTaskExecutionLogs Method - teamId:{}, numberOfDays: {}", teamId, numberOfDays);
ProcedureCall procedureCall = currentSession().createStoredProcedureCall("p_getTeamTasksForLastXDays");
procedureCall.registerParameter( TEAM_ID, Long.class, ParameterMode.IN ).bindValue( teamId );
procedureCall.registerParameter( NUMBER_OF_DAYS, Long.class, ParameterMode.IN ).bindValue( numberOfDays );
ProcedureOutputs outputs = procedureCall.getOutputs();
ResultSetOutput resultSetOutput = (ResultSetOutput) outputs.getCurrent();
List resultSetList = resultSetOutput.getResultList();
}
当我尝试调用这个过程时得到的错误如下
java.lang.ClassCastException: org.hibernate.result.internal.UpdateCountOutputImpl cannot be cast to org.hibernate.result.ResultSetOutput
at com.mct.dao.database.impl.TaskDetailsDAOImpl.getTaskExecutionLogs(TaskDetailsDAOImpl.java:229)
当我尝试在 MySql 中调用存储过程时,完全相同的代码可以正常工作
非常感谢任何帮助
谢谢 达米安
【问题讨论】:
-
第 229 行是 - ResultSetOutput resultSetOutput = (ResultSetOutput) outputs.getCurrent();