0

私はHibernate
を初めて使用します ここで私の問題は、休止状態を使用してmssqlのストアドプロシージャを呼び出す方法を知っているため、ここではネイティブクエリを使用し、これを呼び出しています

@NamedNativeQueries({
@NamedNativeQuery(
name = "callProc",
query = "EXEC SimpleProc :var,:var1,:var2,
resultClass = resultbean.class
)})

ここに、let it be MultiResultProcのような名前のプロシージャがあります。

Create Procedure MultiResultProc
.....
begin
select * from resulttable1;
select * from resulttable2;
select * from resulttable3;
end

したがって、Hibernate が Sybase および MSSQL db の複数の結果セットを処理しないことがわかった場所でグーグル検索すると、これらの複数の結果クラスを指定する方法がわかりました。しかし、私はそのタイプの作業が必要です...ここで私のプロジェクトにはそのタイプの複数の手順があり、再度設計することはできません.
**だから私を助けてください**

4

2 に答える 2

0

Hibernate でストアド プロシージャを実行する際に注意すべきことは何ですか?

  • ストアド プロシージャにsingleまたはoperation がある場合はInsert、それを有効にする必要があります。UpdateDeletebeginTransactin()commit()
  • Hibernate は、ストアド プロシージャの最初の結果のみを選択します。例: 2 つの select ステートメントを記述すると、Bean の場合は最初の結果が hibernate にマップされ、Bean がない場合は最初の結果のみがオブジェクトのリストとして返されます。

答えはノーです。休止状態で 3 つのテーブル レコードすべてを取得することはできません。

于 2014-10-30T18:18:28.543 に答える
0

休止状態でcursors使用する場合は、作業する必要があると思います。stored procedureこれがあなたがすべきことです。

  • カーソルを開くselect * from table1
  • select * from table2既存のカーソルに結合します。
  • 同様に、テーブル n から選択し、既存の結果セット カーソルと結合します。
  • 休止状態から返されたカーソルを、すべてのテーブルから返されたすべてのフィールドを含む適切なクラスにマップします。
  • クラスから必要に応じて結果をこぼしました。

これにより、多くの時間と労力を節約できます。正確な例については、このリンクにアクセスしてください。

于 2014-10-31T05:24:47.510 に答える