【问题标题】:hibernate 5 call MSSQL 8 stored procedure errorhibernate 5调用MSSQL 8存储过程错误
【发布时间】:2018-01-26 09:54:44
【问题描述】:

我有以下程序:

  DECLARE @rec INT, @ret INT ;
EXECUTE @ret = udo_ui.PR_GetDocuments
   @iTotRecCount = @rec OUTPUT,
   @iFirstRecNo = 18,
   @iRetRecCount = 50,
   @department_id = 181 -- int
;
SELECT @ret,@rec;

我想在 Hibernate 中调用它(最好是在 spring 数据中)

 StoredProcedureQuery storedProcedure = manager.createStoredProcedureQuery("udo_ui.PR_GetDocuments")
                    .registerStoredProcedureParameter("iTotRecCount", Integer.class, ParameterMode.OUT)
                    .registerStoredProcedureParameter("iFirstRecNo", Integer.class, ParameterMode.IN)
                    .registerStoredProcedureParameter("iRetRecCount", Integer.class, ParameterMode.IN)
                    .registerStoredProcedureParameter("department_id", Integer.class, ParameterMode.IN);

            storedProcedure
                    .setParameter("iFirstRecNo", 18)
                    .setParameter("iRetRecCount", 50)
                    .setParameter("department_id", 181);

            boolean b = storedProcedure.execute();
            System.out.println("B=" + b + " " + storedProcedure.getOutputParameterValue("iTotRecCount"));

但我无法获取参数值,并且 execute() 方法返回 false。如何让它发挥作用?我需要在选择中获取结果集和 2 个参数。谢谢

【问题讨论】:

    标签: sql-server hibernate stored-procedures


    【解决方案1】:

    我认为这个解决方案可能对很多人都有帮助。所以问题是当hibernate向mssql服务器发送请求时,它使用位置参数,而不是名称。因此,如果您的程序有 3 个参数,您应该完全按照程序定义中这些参数的顺序注册参数。因此,在我的情况下,解决方案是交换寄存器参数以使它们遵循过程中的参数顺序。所以如果我这样做了

    .registerStoredProcedureParameter("iTotRecCount", Integer.class, ParameterMode.OUT)
    .registerStoredProcedureParameter("iRetRecCount", Integer.class, ParameterMode.IN)
    .registerStoredProcedureParameter("iFirstRecNo", Integer.class, ParameterMode.IN)
    .registerStoredProcedureParameter("department_id", Integer.class, ParameterMode.IN);
    

    代替

    .registerStoredProcedureParameter("iTotRecCount", Integer.class, ParameterMode.OUT)
    .registerStoredProcedureParameter("iFirstRecNo", Integer.class, ParameterMode.IN)
    .registerStoredProcedureParameter("iRetRecCount", Integer.class, ParameterMode.IN)
    .registerStoredProcedureParameter("department_id", Integer.class, ParameterMode.IN);
    

    成功了,太好了!

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      相关资源
      最近更新 更多