我在Postgres中有一个存储过程。该程序有4个OUT参数。通常使用JPA我无法得到结果。我正在尝试做的是使用该过程的SELECT查询。
例如,如果我在pgAdmin中尝试查询:
SELECT * FROM get_results(arg0,arg1 etc);
我得到一个包含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!
有什么建议吗?
答案 0 :(得分:3)
JPA 2.1现在支持存储过程,请阅读Java文档here。
示例:
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");
查看详细示例here。
答案 1 :(得分:0)
使用hibernate下面的代码共同调用程序。
Query query = session.getNamedQuery("ProcedureName")
.setParameter(parameterName,value);
.setParameter(parameterName,value);
.setParameter(parameterName,value);
.setParameter(parameterName,value);