使用JPA读取多个Resultset

时间:2011-01-25 10:42:15

标签: java stored-procedures jpa eclipselink

我正在使用JPA(Eclipselink)执行返回多个Resultsets的SQL Server存储过程。

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

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

执行SP后,我只能读取单个(或第一个)ResultSet

有人可以建议我如何检索下一个ResultSet(或ResultLists())?

2 个答案:

答案 0 :(得分:3)

我不能专门回答EclipseLink,我不确定JPA规范说的是什么,但JPA的大多数功能都来自Hibernate,Hibernate的limitations on stored procedures是:

  

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

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

答案 1 :(得分:2)

EclipseLink通过其StoreProcedureCall类和NamedStoredProcedureCallQuery注释扩展了对存储过程的支持。您可以使用JpaEntityManager接口createQuery(Call)API使用StoredProcedureCall创建JPA查询。

StoreProcedureCall提供了对JPA本机SQL查询的额外支持,包括对in,out和intout参数以及cursored输出参数和输入的支持。 StoreProcedureCall支持具有结果集和输出参数的调用,但目前不支持多个结果集。

您的第二个结果集中返回了什么,以及如何返回结果?您可以在EclipseLink中子类化和自定义SQLServerPlatform,并覆盖executeStoredProcedure()方法以处理多个结果集。它应该很难,如果成功,您可以将代码贡献给EclipseLink。或者您可以记录和增强此功能的请求。查看代码应该足够简单实现,更大的问题是如何返回多个结果集。