То, что вы пытаетесь (обработка параметров INOUT / OUT), не поддерживается в 4.1.В версии 4.1 поддержка вызываемых операторов Hibernate сосредоточена на возвратах ResultSet.Существует поддержка того, что вы пытаетесь уже использовать в основной ветке разработки, и будет частью следующего основного выпуска Hibernate (который будет либо 4.2, либо 5.0);здесь вызов функций / процедур теперь является операцией первого класса.
На данный момент вы должны либо использовать JDBC напрямую, либо собрать Hibernate из master и использовать эту новую поддержку.Если вы выберете более поздний вариант, он будет выглядеть следующим образом:
StoredProcedureCall call = session.createStoredProcedureCall( "GET_VENDOR_STATUS_COUNT" )
.registerStoredProcedureParameter( "DOCUMENT_ID", Long.class, ParameterMode.IN )
.registerStoredProcedureParameter( "NOT_INVITED", String.class, ParameterMode.OUT )
...;
call.getRegisteredParameter( "DOCUMENT_ID" ).bindValue( theDocumentId );
StoredProcedureOutputs outputs = call.getOutputs();
String notInvited = (String) outputs.getOutputParameterValue( "NOT_INVITED" );
...
Этот код еще молодой и, вероятно, изменится.Например, когда я пишу эти примеры чаще, я думаю, что registerStoredProcedureParameter
следует переименовать в registerParameter
или declareParameter
и что оно должно возвращать типизированное представление объявления / регистрации;что-то вроде:
interface RegisteredParameter<T> {
Class<T> getParameterType();
// only valid for IN or INOUT params
void bindValue(T value);
}
<T> RegisteredParameter<T> registerParameter(String name, Class<T> type, ParameterMode mode);
, что позволило бы:
StoredProcedureCall call = session.createStoredProcedureCall( "GET_VENDOR_STATUS_COUNT" )
call.registerParameter( "DOCUMENT_ID", Long.class, ParameterMode.IN ).bindValue( theDocumentId );
RegisteredParameter<String> notInvitedParam = call.registerParameter( "NOT_INVITED", String.class, ParameterMode.OUT );
...
String notInvited = outputs.getOutputParameterValue( notInvitedParam );
В качестве дополнительного бонуса, люди, пробующие это раньше, получают помощь в формировании того, как это выглядит до его выпускав этот момент изменить намного сложнее).