[英]How to call a stored procedure using 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
我讀過某個地方,使用休眠模式調用函數和過程將非常相似。 然后,我發現(巧合地也在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中執行此操作的方法。 (但是我讀過這表明您的設計不正確)我應該怎么辦? 我完全迷路了...我該如何解決? 我應該更改程序以其他方式返回我的值嗎?
謝謝,奧斯卡
存儲過程的簽名與調用它的方式之間不匹配。 您必須將其稱為“調用BookBed(?,?,?)”。 還要注意,它僅需要3個參數,而不是4個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.