hibernate createStoredProcedureQuery execute throws callablestatement.getmoreresults

时间:2017-06-29 17:42:11

标签: java sql-server hibernate entitymanager

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

我有几种方法可以尝试这样做并且两者都出错了。

em是一个在类中声明更高级的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());
}

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

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

我有一个谷歌(这是我从中获取原生查询代码的地方),但无法获得任何回报。即使只是一个没有返回值的存储过程调用,对我来说也是一个神的结果。

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:5)

StoredProcedureQuery个索引从1

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

答案 1 :(得分:0)

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

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

在我的情况下,我也将getSingleResult()强制转换为String,因为我期望它是INOUT StoredProcedure的参数,并且可以正常工作。

我希望它也会对您有所帮助。