Es esta entrada les quiero compartir como invocar un Store Procedure con Parametros de Salida y recuperarlos por medio de Hibernate.
Es ejemplo lo realizo con la Base de datos Oracle 11g XE y con la versión de Hibernate 4.3.
Codigo del Store Procedure.

A continuación el código con la explicación:
package com.oscarblancarte.hibernate;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.persistence.ParameterMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.procedure.ProcedureCall;
import org.hibernate.service.ServiceRegistry;
public class HibernateProcedure {
private static final SessionFactory sessionFactory = buildSessionFactory();
public static void main(String[] args) {
// Obtenemos la session
Session session = getSessionFactory().getCurrentSession();
// Abrimos transacción <OPCIONAL>
session.beginTransaction();
// Nombre del SP
ProcedureCall call = session.createStoredProcedureCall("PROC1");
// Registramos el primer parametros de entrada
call.registerParameter(1, String.class, ParameterMode.IN);
// Registramos el segundo parametro de salida
call.registerParameter(2, Integer.class, ParameterMode.OUT);
//Establecemos el valor del primer parametros de entrada
call.getParameterRegistration(1).bindValue("hola");
//Ejecutamos el SP y obtenemos el parametro 2, el cual es de salida(out)
Object salida = call.getOutputs().getOutputParameterValue(2);
//Se imprime el parametro de salida
System.out.println("SALIDA ==> " + salida.toString());
// cerramos transacción <OPCIONAL>
session.getTransaction().commit();
System.out.println("FIN");
}
private static SessionFactory buildSessionFactory() {
try {
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistry);
return sessionFactory;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}La clave es registrar adecuadamente los parámetros, registrando su tipo de dato y Mode el cual puede ser de entrada o salida.