java - 使用 jpa 2.x 调用存储过程会引发非法ArgumentException
问题描述
我的 mssql 服务器上有以下过程,我想从我的 java 代码中执行
DECLARE @RC int
DECLARE @newUid bigint
EXECUTE @RC = [TEST_DB].[foobar].[getNextUid] @newUid OUTPUT
在我的代码中,我定义了一个实体并使用 NamedStoredProcedureQuery 注释来定义它
@Entity
@NamedStoredProcedureQuery(
name = "foobar.getNextUid",
procedureName = "foobar.getNextUid",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.OUT, type = Long.class, name = "newUid")
}
)
当我在测试中调用此存储过程时,它会引发异常
java.lang.IllegalArgumentException: No @NamedStoredProcedureQuery was found with that name : foobar.getNextUid
我还尝试将注释中的参数命名为@newUid
这是我的测试用例
EntityManager entityManager = managerEntityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery("foobar.getNextUid");
query.setParameter("@newUid", 1);
long nextUid = (long) query.getOutputParameterValue("newUid");
entityManager.getTransaction().commit();
entityManager.close();
解决方案
尝试替换 query.getOutputParameterValue("@newUid"); 通过 query.getOutputParameterValue("newUid");
推荐阅读
- http - Golang RedirectHandler() 返回接口,以 *http.redirectHandler 结尾
- python - matplotlib 极坐标图填充整个图形
- c++ - Alsa - 当应用程序作为服务运行时,在应用程序中设置音量会有所不同
- scala - 通过 Pureconfig 从资源目录加载不同的文件
- python - 如何通过组合两个列表来形成字典
- docker - 限制用户访问 Docker Registry 以进行 docker push 操作
- c++ - 跨线程的 std::stringstream 无法按预期工作
- java - 找不到执行环境“JavaSE-1.8”的有效 JRE
- python - 在 Python subprocess.Popen 调用期间测量 CPU 时间
- node.js - nodejs的calDAV服务器