【问题标题】:Reading Multiple Resultset using JPA使用 JPA 读取多个结果集
【发布时间】:2011-01-25 10:42:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “多个结果集”是什么意思?线?还是您的程序不止一次选择?
  • @Renan:SQLServer SP 可以返回多个结果集。
  • @Renan:是的多选。

标签: java stored-procedures jpa eclipselink


【解决方案1】:

我无法具体回答 EclipseLink,我不确定 JPA 规范是怎么说的,但 JPA 的大多数功能都从 Hibernate 中获得启发,Hibernate 的limitations on stored procedures 是:

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

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

【讨论】:

    【解决方案2】:

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

    StoreProcedureCall 提供对 JPA 原生 SQL 查询的额外支持,包括对 in、out 和 inut 参数以及游标输出参数和类型的支持。 StoreProcedureCall 支持同时使用结果集和输出参数的调用,但目前不支持多个结果集。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2023-03-29
      相关资源
      最近更新 更多