Ejemplo:
Params es una clase para encapsular lo datos entrada salida.
public void executeProcedimientoAlmacenado(final Params params) {
final StringBuilder sql = new StringBuilder("");
sql.append(" call esquema.nombre_procedimiento_almacenado(");
sql.append(" ?,");//IN_param_1
sql.append(" ?,");//IN_param_2
sql.append(" ?)");//OUT_param_1
getSession().doWork(new Work(){
public void execute(Connection connection) throws SQLException {
CallableStatement callStmt = connection.prepareCall(sql.toString());
int indexParam=1;
callStmt.setInt(indexParam++, params.getInParam_1());//1
callStmt.setInt(indexParam++, params.getInParam_2() !=null ? params.getInParam_2() : Types.NULL);//2
callStmt.registerOutParameter(indexParam++, Types.INTEGER);//3
callStmt.executeUpdate();
params.setOutParam(callStmt.getInt(3)); //El parametro 3 es la salida, y lo pasamos al objecto params
}
});
}
Como se ve se utiliza "Work" que es una ejecución directa jdbc encampsulada por hibernate 4, y el objeto Params contiene los datos de entrada posterioremente se setean los de salida y así desde donde se llama el método el params contiene los resultados.
el getSession() es para obtener la session de hibernate, que se traduce también en sessionFactory.getSession() el sessionFactory es inyectado con Spring al Dao que ejecute los procedimientos almacenados, igual que cualquier otro dao.