Чтение нескольких результатов с использованием JPA - PullRequest
2 голосов
/ 25 января 2011

Я использую JPA (Eclipselink) для выполнения хранимой процедуры SQL Server, которая возвращает несколько наборов результатов.

Насколько мне известно, самый простой способ вызова SP:

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

Послевыполняя SP, я могу прочитать только один (или самый первый) ResultSet.

Может кто-нибудь подсказать, как мне получить следующие ResultSets (или ResultLists ())?

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Я не могу отвечать конкретно за EclipseLink, и я не уверен, что говорится в спецификации JPA, но большинство функций JPA были взяты из Hibernate, и ограничения Hibernate для хранимых процедур следующие:

Процедура должна возвращать набор результатов. Обратите внимание, что, поскольку эти серверы могут возвращать несколько наборов результатов и количество обновлений, Hibernate будет повторять результаты и принимать первый результат, являющийся набором результатов, в качестве возвращаемого значения. Все остальное будет отброшено.

Я предполагаю, что JPA определяет то же ограничение.

2 голосов
/ 25 января 2011

EclipseLink расширил поддержку хранимых процедур благодаря своему классу StoreProcedureCall и аннотации NamedStoredProcedureCallQuery. Вы можете создать JPA-запрос с помощью StoredProcedureCall с помощью интерфейса API createQuery (Call) интерфейса JpaEntityManager.

StoreProcedureCall предоставляет дополнительную поддержку для запросов SQL собственного JPA, включая поддержку параметров ввода, вывода и выхода, а также параметры курсора и тип ввода. StoreProcedureCall поддерживает вызовы как с набором результатов, так и с выходными параметрами, но в настоящее время не поддерживает несколько наборов результатов.

Что возвращается во втором наборе результатов и как вы хотите, чтобы результат был возвращен? Вы можете создать подкласс и настроить свою SQLServerPlatform в EclipseLink и перезаписать метод executeStoredProcedure () для обработки нескольких наборов результатов. Это не должно быть трудно, и вы можете внести код обратно в EclipseLink в случае успеха. Или вы можете войти и запрос на улучшение этой функции. Глядя на код, он должен быть достаточно простым для реализации, большая проблема в том, как вернуть несколько наборов результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...