hibernate createStoredProcedureQuery执行throws callablestatement.getmoreresults

Nei*_*ill 2 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());
}
Run Code Online (Sandbox Code Playgroud)

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

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

程序已经被简化为一个简单的"选择1",以确保这不是问题.

PROCEDURE [usp_myProc]
-- Add the parameters for the stored procedure here
@id INT
AS
BEGIN
   SELECT 1
END
Run Code Online (Sandbox Code Playgroud)

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

谢谢你提供的所有帮助.

Rei*_*eus 5

StoredProcedureQuery 指数始于 1

query.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
query.setParameter(1, id);
Run Code Online (Sandbox Code Playgroud)

  • 尝试在过程开始时设置"SET NOCOUNT ON"以避免返回数据库计数消息 (2认同)