休眠 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 的参数并且它按预期工作。
希望对你也有帮助。
我第一次使用 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 的参数并且它按预期工作。
希望对你也有帮助。