我想从Hibernate调用一个存储过程,它返回一个out值.这是我的存储过程.
create procedure myProcedure ( in in_Id int, out out_Id int ) begin ... END;
我正在尝试这个来调用我的程序
Query query = session.createSQLQuery( "CALL myProcedure(:in_Id)") .setParameter("in_id", 123); //Not sure how to register out parameters...?? List result = query.list();
我尝试了一切,但没有运气.你能帮我吗?如果我尝试以上说法:
PROCEDURE myProcedure的参数数量不正确; 预计2,得到1
我试着添加一个out参数
myProcedure(:out_id:in_Id)
但随后它说
并非所有命名参数都已设置:
我不知道如何设置参数?它像下面这样吗?
.setParameter("out_id", ?);
任何帮助表示赞赏:)
我写了一篇非常详细的文章,介绍如何从Hibernate调用MySQL存储过程和数据库函数,但我也会在这里写一篇简短的摘要.
考虑到你有一个输出基本类型的简单存储过程:
CREATE PROCEDURE count_comments ( IN postId INT, OUT commentCount INT ) BEGIN SELECT COUNT(*) INTO commentCount FROM post_comment WHERE post_comment.post_id = postId; END
您可以使用JPA调用此存储过程StoredProcedureQuery
:
StoredProcedureQuery query = entityManager .createStoredProcedureQuery("count_comments") .registerStoredProcedureParameter( "postId", Long.class, ParameterMode.IN) .registerStoredProcedureParameter( "commentCount", Long.class, ParameterMode.OUT) .setParameter("postId", 1L); query.execute(); Long commentCount = (Long) query .getOutputParameterValue("commentCount");
最简单的方法是将out参数作为返回参数的一部分返回(仅当您有权访问存储过程时才相关).
jest添加如下所示的商店程序
create procedure myProcedure_only_in_parms ( in in_Id int) begin call myProcedure(in_id,@out_Id) ; select @out_id END;
完成后,以下列方式使用Hibernet非常简单
Query query = session.createSQLQuery( "CALL myProcedure_only_in_parms (:in_Id)") .setParameter("in_id", 123); List result = query.list();
结果包含out参数,如果你想要返回乘法参数你可以通过选择@ parm1,@ parm2,...,@ parmn来添加它
希望它有帮助