Как вызвать хранимую процедуру, используя Hibernate? - PullRequest
0 голосов
/ 27 июня 2011

У меня проблемы с hibernate и MySQL.Я читаю, но я становлюсь еще более запутанным, поэтому я думаю, что вы могли бы помочь мне понять, что мне делать дальше.

У меня есть база данных MySQL, в которую я добавил эту хранимую процедуру (благодаря StackПереполнение людей)

CREATE PROCEDURE BookBed (
OUT oReservaOK boolean,
pPaciente varchar(255),
pHospital bigint(20))
BEGIN
 DECLARE NumLeitosDisponiveis INT;
 DECLARE dt TIMESTAMP;

SET dt = (Select now());
SET NumLeitosDisponiveis = (SELECT AVAILABLEBEDCOUNT FROM HOSPITAL WHERE ID = pHospital); 

IF((SELECT NumLeitosDisponiveis) > 0) THEN 
BEGIN
    START TRANSACTION;

    INSERT INTO RESERVATION(PERSON, HOSPITAL, DATE)
        VALUES (pPaciente, pHospital, dt);

    UPDATE HOSPITAL
        SET AVAILABLEBEDCOUNT = AVAILABLEBEDCOUNT - 1 
    WHERE ID = pHospital;

    SET oReservaOk = true;

    commit;
END;
ELSE 
    SET oReservaOk = false;     
END IF;
END

Я где-то читал, что вызов функций и процедур с использованием hibernate будет очень похожим.Затем я нашел (по совпадению также в StackOverflow ) код для выполнения функции из моего Java-приложения с использованием Hibernate:

session.doWork(new Work() {
        @Override
          public void execute(Connection connection) throws SQLException {
            CallableStatement call = connection.prepareCall("{ ? = call " + functionName + "(?,?,?)  }");
            call.registerOutParameter( 1, Types.BOOLEAN ); // or whatever it is
            call.setString(2, param1);
            call.setLong(3, param2);
            call.registerOutParameter( 4, Types.BOOLEAN ); // or whatever it is
            call.execute();
            DatabaseManager.this.setResult(call.getBoolean(1)); // propagate this back to enclosing class
          }
        });

Я пытался использовать его, но получаю разные видыошибки (это зависит от того, как я настраиваю параметры).В текущий момент времени я получаю сообщение об ошибке «Не указано значение для параметра 3», поскольку я зарегистрировал выходной параметр.Я искал дополнительную информацию, но я запутался, потому что у веб-сайтов разные подходы, и многие ссылки на документацию не работают (ссылки на веб-сайт JBoss).

Я прочитал, мне нужно вернуть курсоркак первый выходной параметр.Я ищу способ сделать это в MySQL.(Но я читал, что это признак того, что ваш дизайн плохой) Что мне делать?Я полностью потерян ... Как я могу решить это?Должен ли я изменить процедуру возврата моего значения другим способом?

Спасибо, Оскар

1 Ответ

1 голос
/ 27 июня 2011

Существует несоответствие между сигнатурой вашей хранимой процедуры и способом ее вызова.Вы должны называть это как "call BookBed (?,?,?)".Также обратите внимание, что требуется только 3 параметра, а не 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...