数据库是oralce,我的存储过程有3个参数,其中,第三个为返回值,
在用jdbc调用的时候,如下:CallableStatement cs = null;
try {
cs = conn.prepareCall("call procName (?,?,?)");
cs.registerOutParameter(3, OracleTypes.INTEGER);
cs.setString(1, tablename);
cs.setString(2, fieldname);
} catch (SQLException e) {
e.printStackTrace();
}
请问,如果改用hibernate方式:
如下:
SQLQuery query = this.getSession().createSQLQuery("call procName (?,?,?)");
如何将第3个参数传进去呢??(第3个参数为返回值)

解决方案 »

  1.   


    Query query = session.getNamedQuery("procName");
    query.setString设置参数
    query.setString设置参数
    List list = query.list();
    Object obj=(Object)list.get(0);
      

  2.   

    首先感谢回帖~
    你这个方法是需要再配置文件里面定义procName吧??
    请问,如果用this.getSession().createSQLQuery("call procName (?,?,?)");
    方式可以得到返回值吗??
      

  3.   

    当然可以
    SQLQuery query=this.getSession().createSQLQuery("{call procName(?,?,?)}");
    query.setString(0,x);
    query.setString(1,xxx);
    query.setString(2,xxxx);
    List list = query.list();
    这样就得到了!
      

  4.   

    因为第三个参数是返回值,在jdbc中是用
    cs.registerOutParameter(3, OracleTypes.INTEGER);
    这种方式传入的,
    我是想请问如果用hibernate,怎么把第三个返回值参数传进去呢??
    等于第三个参数应该是个变量,
    另外,在hibernate中,存储过程的参数是从0开始的,是吗??