0

Postgres にストアド プロシージャがあります。このプロシージャには 4 つの OUT パラメータがあります。通常JPAを使用すると、結果が得られません。私がやろうとしているのは、その手順で SELECT クエリを使用することです。

たとえば、pgAdmin でクエリを試すと、次のようになります。

SELECT * FROM get_results (arg0、arg1 など);

4 つの OUT パラメータからの結果を含む 4 つの列を含む 1 つの結果行を取得します。

しかし、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 に答える