我正在使用EntityManager
createStoredProcedureQuery
方法来调用MSSQL服务器存储过程。我能够成功地将它用于返回单个结果集的proc。对于返回多个结果集的proc,我只能检索(并将其映射到我的实体类)第一个结果集。存储过程目前由我们的遗留应用程序使用,我想重用它,所以我不必进行多个数据库调用。 createStoredProcedureQuery
有一个重载方法(createStoredProcedureQuery(String var1, Class... var2)
),它接受一组类。这些类可用于将结果集映射到实体类。但到目前为止它还没有为我工作。我相信这适用于Oracle存储过程,它返回REF_CURSOR
但不适用于MSSQL。是否有人使用Hibernate,JPA或JDBC在MSSQL中检索多个结果集?
我认为为此提交了一个错误/功能 - https://hibernate.atlassian.net/browse/HHH-9912
这是我遇到的类似问题: https://hibernate.atlassian.net/browse/HHH-10616
更新1:添加了以下代码
public class MyProcRepository {
@Autowired private EntityManager em;
public <T> List<T> getMultipleResultset() {
StoredProcedureQuery spq = em.createStoredProcedureQuery("procWithMultipleResults", AResult.class, BResult.class);
return spq.getResultList();
}
}
Udpate 2:添加了此测试方法
public void getMultipleResultset() {
StoredProcedureQuery spq = em.createStoredProcedureQuery("procWithMultipleResults");
List results1 = spq.getResultList(); // this returns null
if (spq.hasMoreResults()) // this returns false
{
List results2 = spq.getResultList(); // get the second result set
}
}