2011-01-25 100 views
2

我正在使用JPA(Eclipselink)來執行返回多個Resultset的SQL Server存儲過程。使用JPA讀取多個結果集

按我的知識,最簡單的調用一個SP的方法是:

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

執行SP後,我只能讀取單個(或第一個)ResultSet

有人可以請建議如何檢索下一個ResultSet(或ResultLists())?

+0

你是什麼意思「多個ResultSets」?行?或者你的程序有多個選擇? – Renan 2011-01-25 11:53:15

回答

3

我不能回答的EclipseLink特別,我不知道JPA規範說什麼,但JPA的大部分功能了他們的線索,從Hibernate和Hibernate的limitations on stored procedures有:

該過程必須返回結果集。請注意,由於這些服務器可以返回多個結果集並更新計數,因此Hibernate會迭代結果並將第一個結果集作爲其返回值。其他一切都將被丟棄。

我的猜測是JPA定義了相同的限制。

2

EclipseLink通過StoreProcedureCall類和NamedStoredProcedureCallQuery註釋擴展了對存儲過程的支持。您可以使用JpaEntityManager接口createQuery(Call)API使用StoredProcedureCall創建JPA查詢。

StoreProcedureCall提供對JPA本機SQL查詢的額外支持,包括對輸入,輸出和輸入參數以及光標輸出參數和輸入的支持。 StoreProcedureCall支持調用結果集和輸出參數,但目前不支持多個結果集。

在第二個結果集中返回什麼,以及如何返回結果?您可以在EclipseLink中繼承和定製您的SQLServerPlatform,並覆蓋executeStoredProcedure()方法以處理多個結果集。它不應該很難,如果成功,您可以將代碼返回給EclipseLink。或者您可以登錄並增強對此功能的請求。查看代碼應該足夠簡單來實現,更大的問題是如何返回多個結果集。