休眠 createStoredProcedureQuery 执行抛出 callablestatement.getmoreresults

hibernate createStoredProcedureQuery execute throws callablestatement.getmoreresults

我第一次使用 Java 调用 SP,所以这可能是我忽略的一个简单问题。

我尝试了几种方法,但都遇到了错误。

em 是一个在 class 上声明的 EntityManager,我在调试期间检查过它并且数据库连接是正确的。

第一个是使用会引发错误的 StoredProcedureQuery;

javax.persistence.PersistenceException: org.hibernate.SQLGrammarException: 调用 CallableStatement.getMoreResults

时出错
try {
    StoredProcedureQuery query = em.createStoredProcedureQuery("usp_myProc");
    query.registerStoredProcedureParameter(0, Integer.class, ParameterMode.IN);
    query.setParameter(0, id);
    query.execute();
} 
catch (Exception ex) {
    log.error(ex.toString());
}

我的第二次尝试是尝试使用本机查询(当我阅读文档时听起来很正确)

try {
    Query query1 = em.createNativeQuery("EXEC usp_myProc ?");
    query1.setParameter(1, id);
    Integer val = (Integer) query1.getSingleResult();
}
catch (Exception ex) {
    log.error(ex.toString());
}

程序已被简化为一个简单的 'Select 1' 以确保这不是问题。

PROCEDURE [usp_myProc]
-- Add the parameters for the stored procedure here
@id INT
AS
BEGIN
   SELECT 1
END

我周围有一个 google(这是我从中获取本机查询代码的地方),但无法向 return 获取任何内容。即使只是一个没有 return 值的存储过程调用,现在对我来说也是一个很好的结果。

感谢您提供的任何帮助。

StoredProcedureQuery 索引从 1

开始
query.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
query.setParameter(1, id);

我遇到了同样的问题,我使用了EntityManager提供的方法如下:

entityManager.createNativeQuery(
"CALL  storedProcedureName(:param1, :param2, :param3)")
.setParameter("param1", parameter1)
.setParameter("param2", parameter2)
.setParameter("param3", parameter3)
.getSingleResult();

在我的例子中,我也将 getSingleResult() 转换为字符串,因为我期望它作为 INOUT StoredProcedure 的参数并且它按预期工作。

希望对你也有帮助。