Hibernate 如何取存储过程的Output参数和ReturnValue

庚武讲堂 2012-07-22 01:45:46
如题,
本人需求是:hibernate调用一个存储过程,传入pageIndex,和pageSize,用一个ouput类型或者returnValue参数,返回符合条件的总记录数。

List list = hibernateTemplate.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query q= session.createSQLQuery("{call P_TEST_OUTPUT_RETURN(:a,:b,:c)}");
q.setInteger("a", 1);
q.setInteger("b", 2);
q.setParameter("c", 0);

List result = q.list(); //如何取ouput参数c的值???

return result;
}
});

网上资料有说可以用CallableStatement cs = dataSource.getConnection().prepareCall(proc3StoredProcedure);
cs.setString(1, yourName);
cs.registerOutParameter(2, java.sql.Types.VARCHAR);
但是这样不方便的地方是得自己去映身结果集,转为对象,不喜欢这种做法。
请有这方面经验的朋友帮忙一下,谢谢~!
紧急,可行的话,马上结帖~~!!
...全文
268 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyong369 2012-07-22
  • 打赏
  • 举报
回复
CallableStatement cs = dataSource.getConnection().prepareCall(proc3StoredProcedure);
cs.setString(1, yourName);
cs.registerOutParameter(2, java.sql.Types.VARCHAR);
这样其实也不错的
庚武讲堂 2012-07-22
  • 打赏
  • 举报
回复
session().connection()
Ecilpse都提示Deprecated, 不敢用喔。 :)
brightyq 2012-07-22
  • 打赏
  • 举报
回复
嗯,楼上说的,楼主也可以看看例子。
http://yijianfengvip.blog.163.com/blog/static/175273432201121744625928/

或者,把要返回的参数放到返回的list中。然后从list中取。
MiceRice 2012-07-22
  • 打赏
  • 举报
回复
没记错的话,似乎Hibernate对于带out类型的存储过程支持是有问题的。

所以建议还是考虑转为JDBC:

CallableStatement cstmt = session.connection().prepareCall();

然后注册参数用:

cstmt.registerOutParameter();
庚武讲堂 2012-07-22
  • 打赏
  • 举报
回复
csdn的人啥时候如此不堪了……
庚武讲堂 2012-07-22
  • 打赏
  • 举报
回复
在线等喔~~~~

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧