通过MSSQL中的单个数据库调用返回多个结果集 - Hibernate,JPA,JDBC

时间:2018-01-16 15:48:39

标签: hibernate jpa stored-procedures jdbc mssql-jdbc

我正在使用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
        }
    }

0 个答案:

没有答案