代码之家  ›  专栏  ›  技术社区  ›  NANDAKUMAR THANGAVELU

从JPA调用存储过程时无法获取返回值

  •  0
  • NANDAKUMAR THANGAVELU  · 技术社区  · 6 年前

    CREATE PROCEDURE <spnamegoeshere>
    AS
    BEGIN
    /*  Some code goes here */
    return 102323   /*Need to get this value*/
    END
    GO
    

    我们正在执行一个存储过程(托管在SQLServer中),通过JPA使用

    createStoredProcedureQuery("spnamegoeshere");
    

    102323 ". 不幸的是,使用上述命令,无法获取。

    https://docs.microsoft.com/en-us/sql/connect/jdbc/using-a-stored-procedure-with-a-return-status?view=sql-server-2017

    根据上述文件,我可以得到的价值,如果我使用。

    CallableStatement
    

    用JPA做同样的事情, 不修改SP ?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Yuriy Tsarkov    6 年前

    这对我很有用:

      @Test
      public void testProc() {
        SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate);
        Map<String, Object> map = call.withProcedureName("retValTestProc").withReturnValue().execute();
        Assert.assertNotNull("Expected not null result but it is", Objects.nonNull(map));
        Assert.assertTrue("Expected size = 1, actual=" + map.size(), map.size() == 1);
        Assert.assertTrue("Expected value=102323, actual=" + map.get("RETURN_VALUE"),
                          Objects.equals(102323, map.get("RETURN_VALUE")));
      }
    

    在哪里? retValTestProc = <spnamegoeshere>

    SimpleJdbcCall 用一个 DataSource 建造师