2011-01-25 6 views
2

JPA(Eclipselink)を使用して複数の結果セットを返すSQL Serverストアドプロシージャを実行しています。私は、単一の(または非常に最初の)を読み取ることができるSPを実行した後JPAを使用して複数の結果セットを読み取る

entityManager.createNativeQuery("exec sp_name").getResultList(); 

ResultSet

私の知識を1として、SPを呼び出すための最も簡単な方法です。

次のResultSets(またはResultLists())を取得するにはどうすればよいですか?

+0

"複数のResultSets"とはどういう意味ですか?ライン?または、プロシージャで複数の選択が行われますか? – Renan

+0

@Renan:SQLServer SPは複数の結果セットを返すことができます。 – skaffman

+0

@Renan:はい複数選択します。 – JSS

答えて

3

私は特にのEclipseLinkのために答えることができない、と私はJPAの仕様を言うかわからないんだけど、JPAのほとんどの機能が休止状態から自分の手がかりを取って、Hibernateのlimitations on stored proceduresは次のとおりです。

手続きしなければなりません結果セットを返します。これらのサーバは複数の結果セットと更新カウントを返すことができるので、Hibernateは結果を反復して結果セットをその戻り値として取ります。それ以外はすべて破棄されます。

私の推測では、JPAは同じ制限を定義しています。

2

EclipseLinkは、StoreProcedureCallクラスとNamedStoredProcedureCallQueryアノテーションによってストアド・プロシージャのサポートを拡張しました。 JpaEntityManagerインターフェイスのcreateQuery(Call)APIを使用して、StoredProcedureCallを使用してJPAクエリを作成できます。

StoreProcedureCallは、in、outおよびintoutパラメータ、カーソル付き出力パラメータおよび型指定のサポートを含む、JPAネイティブSQLクエリに対する追加サポートを提供します。 StoreProcedureCallは、結果セットと出力パラメーターの両方でコールをサポートしますが、現在は複数の結果セットをサポートしていません。

2番目の結果セットには何が返され、結果はどのように返されますか? EclipseLinkでSQLServerPlatformをサブクラス化してカスタマイズし、executeStoredProcedure()メソッドを上書きして複数の結果セットを処理できます。これは難しいことではありません。成功した場合は、コードをEclipseLinkに戻すことができます。または、この機能のログおよび拡張要求を行うこともできます。コードを見れば実装するだけで十分ですが、より大きな問題は複数の結果セットを返す方法です。

関連する問題