Package org.hibernate.procedure

Defines support for executing database stored procedures and functions and accessing their outputs.

This API is used as follows:

  1. First a reference to ProcedureCall is obtained via one of the overloaded SharedSessionContract.createStoredProcedureCall(java.lang.String) methods.
  2. The ProcedureCall reference is then used to "configure" the procedure call (set timeouts and such) and to perform parameter registration. All procedure parameters that the application wants to use must be registered. For each IN or INOUT parameter, a value may then be bound.
  3. At this point we are ready to execute the procedure call and start accessing the outputs. This is done by first calling the ProcedureCall.getOutputs()} method. The underlying JDBC call is executed as needed. The pattern to access the returns is iteration over the outputs while Outputs.goToNext()} returns true and calling Outputs.getCurrent()} during iteration:
         ProcedureCall call = session.createStoredProcedureCall( "some_procedure" );
         ...
         ProcedureOutputs outputs = call.getOutputs();
         while ( outputs.goToNext() ) {
             final Output output = outputs.getCurrent();
             if ( output.isResultSet() ) {
                 handleResultSetOutput( (ResultSetOutput) output );
             }
             else {
                 handleUpdateCountOutput( (UpdateCountOutput) output );
             }
         }
         
  4. Finally, output parameters can be accessed using the overloaded ProcedureOutputs.getOutputParameterValue(org.hibernate.query.procedure.ProcedureParameter<T>) methods. For portability amongst databases, it is advised to access the output parameters after all returns have been processed.
See Also:
SharedSessionContract.createStoredProcedureCall(String), SharedSessionContract.createStoredProcedureCall(String, Class[]), SharedSessionContract.createStoredProcedureCall(String, String...)