名前付きクエリを使用して定義されたプロシージャを呼び出す春のデータ リポジトリがあります。ストアド プロシージャには 2 つのパラメータがあり、最初のパラメータは ref_cursor で、2 番目のパラメータは in パラメータです。これはsp署名です:
create or replace procedure proc1(out_pos out sys_refcursor , pTrans_ID in Number) is ............
また、これはエンティティの名前付きクエリ定義です。
@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);
}
以下を呼び出すと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