JPA Hibernate调用存储过程

时间:2012-04-23 06:55:10

标签: java hibernate postgresql stored-procedures jpa

我在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!

有什么建议吗?

2 个答案:

答案 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);