有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA Hibernate调用存储过程

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

例如,如果我尝试使用pgAdmin查询:

从get_结果中选择*(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!

有什么建议吗


共 (2) 个答案

  1. # 1 楼答案

    使用下面的代码使用hibernate共同调用过程

    Query query = session.getNamedQuery("ProcedureName")
        .setParameter(parameterName,value);
        .setParameter(parameterName,value);
        .setParameter(parameterName,value);
        .setParameter(parameterName,value);
    
  2. # 2 楼答案

    JPA2.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