 Es esta entrada les quiero compartir como invocar un Store Procedure con Parametros de Salida y recuperarlos por medio de Hibernate.
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.
