ZHENGQXTOM 2011-09-01 14:02
浏览 387
已采纳

hibernate 调用存储过程的通用方法

我想作一个在hibernate中调用存储过程的通用方法
public class callbackfunc implements HibernateCallback {
private String funname;
Map param ;
public callbackfunc(String func,Map param ){
this.funname=func;
this.param=param;
}
public Object doInHibernate(Session session) {
Object o=new Object();
try {
String sql = "{call "+this.getFunname()+ "}";
SQLQuery query=session.createSQLQuery(sql);
Set> s = param.entrySet();

for(Entry e :s){
query.setParameter(e.getKey(), e.getValue());

            }
            List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
           list = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list  
          return list;
        } catch (Exception e) { 
              e.printStackTrace(); 
              return false;
          }

    }
public Map<String, Object> getParam() {
        return param;
}

public void setParam(Map<String, Object> param) {
    this.param = param;
}
public String getFunname() {
    return funname;
}

public void setFunname(String funname) {
    this.funname = funname;
}
}

以上是回调函数
public List> excuteFun(String funname,Map param) {

return getHibernateTemplate().execute(new callbackfunc(funname,param));

}

以上是hibernate调用存储过程的方法
main{
Map m=new HashMap();
m.put("dnpno", "dfv");
cs.excuteFun("WF_DENPNO_SAIBAN_UPDATE('5030',1,=>:dnpno)", m );

}
以上是调用WF_DENPNO_SAIBAN_UPDATE存储过程的测试main方法
WF_DENPNO_SAIBAN_UPDATE 存储过程定义如下
WF_DENPNO_SAIBAN_UPDATE( dnpkbn in varchar2, cnt in number,dnpno out varchar2 )
输入两个参数 dnpkbn cnt
返回字符串型dnpno
为什么总是返回
不能执行查询错误?

  • 写回答

5条回答 默认 最新

  • iteye_15772 2011-09-01 14:28
    关注

    带参数的存储过程是不能这样调的。你可以换个思路用jdbc掉好了,或者就用hibernate获取jdbc连接,然后用jdbc去实现就简单了,具体方法网上很多。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器