У меня проблемы с 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.(Но я читал, что это признак того, что ваш дизайн плохой) Что мне делать?Я полностью потерян ... Как я могу решить это?Должен ли я изменить процедуру возврата моего значения другим способом?
Спасибо, Оскар