私は、休止状態とMySQLにいくつか問題があります。私は読んできましたが、私はさらに混乱しています。私はあなたが次に何をすべきかを理解する助けになると思います。hibernateを使用してストアドプロシージャを呼び出す方法は?
私はこのストアドプロシージャ(スタックオーバーフローの人々のおかげで)
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
を追加したMySQLデータベースを持っている私は、Hibernateを使用して関数やプロシージャを呼び出すことは非常に類似していることをどこかで読みました。それから私は、Hibernateを使用して、私のJavaアプリケーションから使用して機能を実行するためのコード、(偶然にもin StackOverflow)が見つかりました:
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に値が指定されていません」というエラーが表示されます。 私はより多くの情報を検索しましたが、Webサイトにはさまざまなアプローチがあり、ドキュメントへのリンクが多数(JBoss Webサイトへのリンク)壊れているので混乱しています。
私が読んだのは、最初のパラメータとしてカーソルを返さなければならないということです。私はMySQLでそれを行う方法を探しています。 (しかし、これはあなたのデザインが悪いことを示すものです) どうすればいいですか?私は完全に失われています... どうすれば解決できますか?他の方法で私の価値を返すように手続きを変更すべきですか?
おかげで、 オスカー
こんにちは、お返事ありがとうございました。私が質問に投稿したリンクから理解できるように、最初のパラメータはoutパラメータです(http://stackoverflow.com/questions/1703351/how-to-call-a-oracle-function-from-hibernate-with -return-parameter)を使用して戻り値を取得する必要があります。 私がやっていたように、私は関数を使用します。私は、再び働くことができることを願っています。 もう一度感謝します – JSBach