java - 如何从存储过程获取多个结果集到spring boot端

标签 java spring hibernate jpa stored-procedures

我正在尝试从存储过程中获取多个结果到 spring 端,但不知何故我收到了这个错误:

org.hibernate.exception.SQLGrammarException: Error extracting results from CallableStatement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
    at org.hibernate.result.internal.OutputsImpl.convert(OutputsImpl.java:79)
    at org.hibernate.result.internal.OutputsImpl.extractResults(OutputsImpl.java:139)
    at org.hibernate.result.internal.OutputsImpl.extractCurrentResults(OutputsImpl.java:127)

我的商店程序就像, 示例:

DELIMITER ;;

CREATE PROCEDURE `USER_LIST`()
BEGIN

   SET @sqlSelect = 'SELECT * from profile WHERE is_email_verified = 0';

   PREPARE stmt FROM @sqlSelect;
   EXECUTE stmt;

   SET @sqlSelect = 'SELECT * from user WHERE is_phone_verified = 0';

   PREPARE stmt FROM @sqlSelect;
   EXECUTE stmt;


END;;
DELIMITER ;

在 Spring 方面:

StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("USER_LIST");

        // Execute stored procedure
        storedProcedure.execute();

        List<Object[]> storedProcedureResults = storedProcedure.getResultList();

        if(storedProcedure.hasMoreResults())
        {
            System.out.println("Print");
        }

我在编写 storedProcedure.hasMoreResults() 的 if 条件下遇到该错误。

有没有办法在spring端同时获取结果列表?

请帮我解决这个问题。 提前致谢。

最佳答案

Hibernate 只返回过程调用返回的第一个结果集。这意味着如果您将 Profile 表正确映射到其在 Spring 端的相应实体,您将只能检索 Profile 表的结果集。但是,如果您需要两个表的结果,请使用 union 连接两个表的结果集。然后您需要将它映射到一个实体,该实体必须在 spring 端具有两个表的所有列。

关于java - 如何从存储过程获取多个结果集到spring boot端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329404/

相关文章:

java - hibernate -懒惰= true

java - 命令-Xlint=unchecked中的 "lint"是什么意思?

java - 运行 Spring Boot Azure Function App 时出错

java - 将 JS 数组作为 List<> 传递给 Spring MVC Controller

java - 按类类型加载数据的通用 Spring Data JPA 存储库实现

java - SQLGrammarException : ERROR: relation "angajat" does not exist

java - 仅测试 src 文件夹中的 Eclipse Java OpenCV unsatisfiedLinkError

计算午夜数的Java代码(00 :00:00) in a date range

Eclipse 没有通过代理连接到互联网

java - 使用 Camel 监听消息