2012-03-15 13 views
0

EJBステートレスセッションBeanでHibernateを使用してストアドプロシージャから結果を取得しようとしています。JPA/Hibernateを使用したスト​​アドプロシージャの結果

ストアドプロシージャはMS SQL Server 2008で実行されており、パラメータとして整数を受け取り、別の整数を返します。

私はgetResultListかは、getSingleResultの代わりのexecuteUpdateを使用して

Query q = em.createNativeQuery("name_of_my_procedure :param"); 
q.setParameter("param", sequence); 
q.executeUpdate(). 

を使用してプロシージャを呼び出すために管理し、常に面白い例外が発生します。

私はこの発見のアクションではEJB 3.0では

私はいくつかの記事が話した

JPAは、ストアドプロシージャをサポートしていない、とあなたはあなたの持続性プロバイダの独自の機能に依存する必要がSQL Connectionを使用してCallableStatementを使用する方法については、このソリューションはかなり不適切です。

Hibernateを使用して生成されたIDを取得する方法はありますか?

ありがとうございます。

フレッド。

+0

あなたはストアドプロシージャの代わりに関数を使うことができるなら、それはすべて簡単です。あなたはできますか? – ManuPK

答えて

0

最終的に、別のストアドプロシージャを使用して修正しました。

新しいストアドプロシージャを作成して別のストアドプロシージャを呼び出し、結果を一時テーブルに格納しました。 この一時テーブルにエンティティをマップしました。これで、必要な情報を取得できるようになりました。

私はそれが最もエレガントな方法ではないことを知っていますが、私はJPAコードとSQ​​L接続コードを混在/使用したくありませんでした。

0

FYI JPA 2.1では、あなたの質問に対する回答はありませんが、FYI JPA 2.1はstored procedure APIをサポートしています(またはリリース時にサポートします)。このAFAIKを提供する唯一のJPA実装は、DataNucleus JPAです。

+0

私は既にここで見ています: https://blogs.oracle.com/arungupta/entry/jpa_2_1_early_draft これはかなり興味深く、私のニーズに合っていますが、私はJPA 2.0を使用したソリューションが必要です。 TopLinkについて教えてください。ストアドプロシージャへの呼び出しもサポートしていませんか? – Fred

関連する問題