2

JPAを使用してSQL Serverのストアドプロシージャから異なる列を持つ複数の結果セットを処理することは可能ですか? これを行う方法(または最良の方法)は何ですか?

現在、Hibernate 4.3.5 Final と JPA 2.1、SqlServer 2008 を使用しています。

私の現在のアプローチのサガはここにあります: Hibernate JPA, inheritance and Stored Procedure returned multiple results sets

しかし、それは明らかに正しいアプローチではありません。誰かがこの仕事をする方法を知っているなら、私に知らせてください。ありがとう!!

4

3 に答える 3

1

私が使用する JPA 実装のドキュメントを使用すると、このページで複数の結果セットを取得する JPA の標準的な方法を確認できます。「複数の結果セットの一般化された実行」にページダウン

http://www.datanucleus.org/products/accessplatform_4_0/jpa/stored_procedures.html

于 2014-07-09T07:52:14.137 に答える
0

私はあなたと同じ問題を抱えており、ここで報告しました。https://dba.stackexchange.com/questions/265890/can-a-mysql-stored-procedure-return-multiple-resultsets-each-containing-differen?noredirect=1#comment523515_265890

これは設計上の欠陥のようです。そのため、この問題に関するバグの問題も作成しましたhttps://hibernate.atlassian.net/browse/HHH-13983

現在、Hibernate は異なる列セットを持つ複数の結果セットを同時に取得することをサポートしていないようです。しかし、これには回避策があり、次のようになります。

  1. ストアド プロシージャで、作成してストアド プロシージャに返すすべての選択クエリに存在するすべての一意の列で構成される一時テーブルを作成します。したがって、選択クエリ #1 で列name,addressを取得してuser_idいる場合、2 番目の選択クエリで , をproduct取得colorしていますdateCreated。次に、一時テーブルには、列、、、、、がnameこの順序で定義されている必要があります。addressuser_idproductcolordateCreated

  2. 、 、のデータをname、作成した一時テーブルに選択します。それに続いて、temp_table から * を選択します。これで、6 列の結果セットが最初の結果セットとして返されます。アプリケーション側では、ObjectField 配列要素 0、1、および 2 から名前、アドレス、および user_id を取得できます。addressuser_id

  3. コマンドで temp_table を空にしTRUNCATE TABLE temp_tableます。

  4. ステップ 2 を繰り返して、、 、insert selectの値をテーブル temp_table に入力します。productcolordateCreated

  5. temp_table から結果を選択すると、Object[] 要素 3、4、および 5 からデータを取得できます。最後に、temp_table をドロップしてメモリ リソースを解放します。

于 2020-04-27T11:20:19.543 に答える