2011-06-27 16 views
0

私は、休止状態と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でそれを行う方法を探しています。 (しかし、これはあなたのデザインが悪いことを示すものです) どうすればいいですか?私は完全に失われています... どうすれば解決できますか?他の方法で私の価値を返すように手続きを変更すべきですか?

おかげで、 オスカー

答えて

1

あなたのストアドプロシージャの署名と、あなたはそれを呼び出す方法の間に不一致があります。あなたは "Call BookBed(?、?、?)"と呼ぶ必要があります。また、4つではなく3つのパラメータしか必要としないことに注意してください。

+0

こんにちは、お返事ありがとうございました。私が質問に投稿したリンクから理解できるように、最初のパラメータはoutパラメータです(http://stackoverflow.com/questions/1703351/how-to-call-a-oracle-function-from-hibernate-with -return-parameter)を使用して戻り値を取得する必要があります。 私がやっていたように、私は関数を使用します。私は、再び働くことができることを願っています。 もう一度感謝します – JSBach

関連する問題