2016-04-18 16 views
3

名前付きクエリを使用して定義されたプロシージャを呼び出すSpringデータリポジトリがあります。ストアドプロシージャには2つのパラメータがあり、最初のパラメータはref_cursorで、2つ目はパラメータです。これは、SPの署名です:不適切な序数バインディングと名前付きバインディングを組み合わせることはできません。

create or replace procedure proc1(out_pos out sys_refcursor , pTrans_ID in Number) is ............ 

そしてまた、これは実体上のnamedquery定義です:

@javax.persistence.NamedStoredProcedureQuery(name = "getProc", procedureName = "proc1", 
     parameters ={ 
       @StoredProcedureParameter(name = "out_pos",mode = ParameterMode.REF_CURSOR,type = void.class), 
       @StoredProcedureParameter(name = "pTrans_ID",mode = ParameterMode.IN,type = Long.class) 
     } 
) 

そして、これが名前付きクエリを呼び出すリポジトリです:

public interface TempReportRepository extends SwiftRepository<TempReportEntity,Long> { 
    @Procedure(name = "getProc") 
    public Object[] getProc1(@Param("pTrans_ID") Long inParam1); 


} 

I getProc1以下の例外が発生します:

Caused by: java.sql.SQLException: operation not allowed: Ordinal binding and Named binding cannot be combined! 
    at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:10093) 
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:5693) 
    at org.hibernate.result.internal.OutputsImpl.<init>(OutputsImpl.java:69) 
    ... 72 more 
+0

ない答えではなく、良い仕事-ラウンドを使用してStoredProcedureQueryの明示的な作成を使用する必要があることようだが、私は処分しましたこの問題は、パラメータ名(および@Param'アノテーション)を削除し、パラメータの順序が一致していることを確認してください。いいじゃないけど、うまくいった。 – demaniak

答えて