是否可以使用 JPA 在 SQL Server 中处理具有不同列的多个结果集?这样做的方法(或最好的方法)是什么?
我目前正在使用 Hibernate 4.3.5 Final 和 JPA 2.1、SqlServer 2008。
我当前方法的传奇可以在这里找到:Hibernate JPA、继承和存储过程返回多个结果集
但这显然不是正确的方法。如果有人知道如何使这项工作,请告诉我。谢谢!!
是否可以使用 JPA 在 SQL Server 中处理具有不同列的多个结果集?这样做的方法(或最好的方法)是什么?
我目前正在使用 Hibernate 4.3.5 Final 和 JPA 2.1、SqlServer 2008。
我当前方法的传奇可以在这里找到:Hibernate JPA、继承和存储过程返回多个结果集
但这显然不是正确的方法。如果有人知道如何使这项工作,请告诉我。谢谢!!
使用我使用的 JPA 实现的文档,您可以在此页面上看到检索多个结果集的 JPA 标准方法。向下翻页到“通用执行,用于多个结果集”
http://www.datanucleus.org/products/accessplatform_4_0/jpa/stored_procedures.html
这似乎是一个设计缺陷,因此我还在这里创建了一个关于该问题的错误问题https://hibernate.atlassian.net/browse/HHH-13983
目前 Hibernate 似乎不支持同时检索具有不同列集的多个结果集。但是有一个解决方法,它是这样的:
在存储过程中创建一个临时表,该表由您在存储过程中创建和返回的每个选择查询中存在的所有唯一列组成。因此,如果在选择查询 #1 中检索列name
, address
,user_id
并且在第二个选择查询中检索product
, color
, dateCreated
。然后,您的临时表应该具有按该顺序定义的列name
, address
, user_id
, product
, 。color
dateCreated
选择 , 的数据name
到address
您user_id
创建的临时表中。之后从 temp_table 中选择 *。现在返回 6 列的结果集作为第一个结果集。在应用程序端,您可以从 ObjectField 数组元素 0、1 和 2 中检索名称、地址和 user_id。
使用命令清空 temp_table TRUNCATE TABLE temp_table
。
重复第 2 步,现在您将,的insert select
值放入表 temp_table 中。product
color
dateCreated
从 temp_table 中选择结果,您可以从 Object[] 元素 3 4 和 5 中获取数据。最后删除 temp_table 以释放内存资源。
当每个结果集返回不同的列时,您可以创建不同的 DTO 来收集结果,并使所有 DTO 实现接口或扩展抽象类(抽象类应包含所有结果集共有的列)。那么返回类型应该是实现的接口/抽象类。这在我的经验中有效。