【问题标题】:How to retrieve output param from Stored Procedure with Hibernate如何使用 Hibernate 从存储过程中检索输出参数
【发布时间】:2020-08-29 23:42:09
【问题描述】:

我正在尝试执行一个存储过程,它更新一列并在更新后从同一个表中检索文件名

存储过程:

 CREATE DEFINER=`test`@`%` PROCEDURE `update_count`(
    IN in_testID                VARCHAR(64),
    OUT out_FileName        VARCHAR(100),
    OUT out_Message         VARCHAR(100))
BEGIN
    UPDATE files SET count=count+1 WHERE testID=in_testID;    
    SELECT FileName INTO out_FileName FROM files WHERE testID = in_testID;    
    SET out_Message = 'File updated uccessfully';
END

执行这个StoredProcedure的Java代码:

Query query = session.createSQLQuery("CALL update_count(:in_testID, @out_FileName, @out_Message)").addEntity(FilesBean.class)
.setParameter("in_testID",body.getTestId());
query.executeUpdate();

query.executeUpdate() 更新为query.list()。但是返回错误的行ResultSet is from UPDATE. No Data

我需要使用 createSQLQuery 来解决这个问题

【问题讨论】:

    标签: java mysql hibernate stored-procedures hibernate-4.x


    【解决方案1】:

    最简单的方法是将 out 参数作为返回参数的一部分返回(仅当您有权访问存储过程时才相关)。 只需添加如下的存储过程

    create procedure myProcedure_only_in_prams (
       in in_Id int)
    begin
    call myProcedure(in_id,@out_Id) ;
    select @out_id
    END;
    

    完成后,通过以下方式将其与 Hibernate 一起使用非常简单

    Query query = session.createSQLQuery(
    "CALL myProcedure_only_in_parms (:in_Id)")
    .setParameter("in_id", 123);
    List result = query.list();
    

    结果包含 out 参数,如果要返回乘法参数,可以通过执行 select @parm1,@parm2,... ,@parmn

    来添加它

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2013-11-24
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多