0

我在 Postgres 中有一个存储过程。该过程有 4 个 OUT 参数。通常使用 JPA 我无法得到结果。我想要做的是在该过程中使用 SELECT 查询。

例如,如果我在 pgAdmin 中尝试查询:

SELECT * FROM get_results(arg0、arg1 等);

我得到一个包含 4 列的结果行,其中包含 4 个 OUT 参数的结果。

但是当我尝试在 JPA 中使用它时它失败了。我正在尝试类似的东西:

Query q = em.createNativeQuery("SELECT * FROM get_results (arg0, arg1 etc)");
q.getSingleResult();

但它抛出一个java.lang.IllegalStateException [com.arjuna.ats.internal.jta.transaction.arjunacore.nosuchtx] [com.arjuna.ats.internal.jta.transaction.arjunacore.nosuchtx] No such transaction!

有什么建议么?

4

2 回答 2

3

JPA 2.1 现在支持存储过程,请在此处阅读 Java 文档。

例子:

StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("sales_tax");
// set parameters
storedProcedure.registerStoredProcedureParameter("subtotal", Double.class, ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("tax", Double.class, ParameterMode.OUT);
storedProcedure.setParameter("subtotal", 1f);
// execute SP
storedProcedure.execute();
// get result
Double tax = (Double)storedProcedure.getOutputParameterValue("tax");

请参阅此处的详细示例。

于 2013-09-01T06:12:30.223 回答
0

使用下面的代码共同调用程序使用休眠。

Query query = session.getNamedQuery("ProcedureName")
    .setParameter(parameterName,value);
    .setParameter(parameterName,value);
    .setParameter(parameterName,value);
    .setParameter(parameterName,value);
于 2012-04-23T07:39:34.627 回答