我想在PostgreSQL中创建一个存储过程来进行一些计算并将其返回给My java调用。我尝试过Java-Hibernate中的大多数选项,但无法成功。以下是我的SP。
CREATE OR REPLACE FUNCTION "GET_REPORT"()
RETURNS refcursor AS
$BODY$DECLARE
ref refcursor;
BEGIN
OPEN ref FOR Select sum(balance),avg(balance) from sales;
RETURN ref;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION "GET_REPORT"()
OWNER TO postgres;
在Java中如何调用此过程来获取值。 注意:我没有使用hibernate XML文件来调用quires。
请提供Java代码(使用Session)以及程序中的任何更改(如果需要)。
答案 0 :(得分:1)
正如我在this article中解释的那样,您可以使用JPA StoredProcedureQuery
来调用PostgreSQL存储过程或函数
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");
或者,如果您想使用Hibernate Session
:
ProcedureCall call = session
.createStoredProcedureCall("post_comments");
call.registerParameter(1,
void.class, ParameterMode.REF_CURSOR);
call.registerParameter(2,
Long.class, ParameterMode.IN).bindValue(1L);
Output output = call.getOutputs().getCurrent();
if (output.isResultSet()) {
List<Object[]> postComments =
((ResultSetOutput) output).getResultList();
assertEquals(2, postComments.size());
}
就是这样!