hibernate调用存储过程,带out输出参数

public Long callProc(final String proc,final List<Object> paramList,final int outIndex, final int type) {
		return (Long) getHibernateTemplate().execute(new HibernateCallback<Object>() {
			public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException {
	Long result = null;
                Connection conn = null;
                CallableStatement cstmt = null;
                try {
                    conn = session.connection();
                    conn.setAutoCommit(false);
                    cstmt = conn.prepareCall(proc);
                    for (int i=0; paramList != null && i<paramList.size(); i++) {
                    	if(i+1 == outIndex) {
                    		cstmt.setInt(i+1,(Integer.parseInt(paramList.get(i).toString())));
                    	} else {
                    		cstmt.setString(i+1, paramList.get(i).toString());
                    	}
                    }
                    cstmt.registerOutParameter(outIndex,type);
                    cstmt.execute();
                    result = new Long(cstmt.getInt(outIndex));
                    conn.commit();
                } catch (Exception ex) {
                    try {
                        conn.rollback();
                    } catch (SQLException e1) {
                        logger.error(e1);
                        e1.printStackTrace();
                    }
                    ex.printStackTrace();
                } finally {
                    if(cstmt != null) {
                    	try {
                    		cstmt.close();
                    	}catch(Exception ex) {}
                    }
                }
                return result;
			}
		});
	}


必须要用connection,当前代码还没有该用factory来获取connect,而使用已经过期的session.connect()方法。
看介绍在hibernate4.x之后该方法将会被去掉。

你可能感兴趣的:(Hibernate)