使用JPA读取多个结果集

4

我将使用JPA(Eclipselink)执行返回多个结果集的SQL Server存储过程。

据我所知,调用SP最简单的方法是:

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

执行存储过程后,我只能读取单个(或第一个)ResultSet。请问有什么方法可以获取下一个结果集(或结果列表)吗?


“多个结果集”是什么意思?是指行吗?还是你的程序执行了多个查询操作? - Renan
@Renan:SQLServer 存储过程可以返回多个结果集。 - skaffman
@Renan:是的,多选。 - JSS
2个回答

3

我无法针对EclipseLink做出具体回答,也不确定JPA规范的要求,但是JPA的大多数功能都是受Hibernate启发的,并且Hibernate的存储过程限制是:

该过程必须返回一个结果集。请注意,由于这些服务器可以返回多个结果集和更新计数,因此Hibernate将迭代结果并取第一个结果作为其返回值。其他所有内容都将被丢弃。

我的猜测是JPA定义了相同的限制。


2
EclipseLink通过StoreProcedureCall类和NamedStoredProcedureCallQuery注解扩展了对存储过程的支持。您可以使用JpaEntityManager接口的createQuery(Call) API创建一个使用StoredProcedureCall的JPA查询。
与JPA本地SQL查询相比,StoreProcedureCall提供了额外的支持,包括对于in、out和intout参数以及游标输出参数和类型的支持。StoreProcedureCall支持调用带有结果集和输出参数的过程,但目前不支持多个结果集。
在第二个结果集中返回了什么内容?您可以在EclipseLink中子类化并自定义SQLServerPlatform,并覆盖executeStoredProcedure()方法以处理多个结果集。这应该不难,并且如果成功的话,您可以将代码贡献回EclipseLink。或者,您可以记录一个增强请求以获取此功能。从代码上看,实现起来应该很简单,更大的问题是如何返回多个结果集。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接