【发布时间】:2011-06-27 18:12:08
【问题描述】:
我在使用 hibernate 和 MySQL 时遇到了一些问题。我一直在阅读,但我变得更加困惑,所以我想你可以帮助我了解我接下来应该做什么。
我有一个 MySQL 数据库,我在其中添加了这个存储过程(感谢 Stack Overflow 的人)
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
我在某处读到使用休眠调用函数和过程会非常相似。然后我发现(巧合的是in StackOverflow),使用Hibernate从我的java应用程序中执行函数的代码:
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 中执行此操作的方法。 (但我读过这表明你的设计很糟糕) 我应该怎么办?我完全迷失了…… 我该如何解决?我应该更改过程以以其他方式返回我的值吗?
谢谢, 奥斯卡
【问题讨论】: