JPAを使用してJPAを使用してカスタム・インプリメンテーションでストアド・プロシージャを呼び出す方法があります。問題は、呼び出しを実行するときに「インデックスに:: INまたはOUTパラメータがありません:: 7」が表示されることです。明示的に登録されているにもかかわらず "SQLException:INまたはOUTパラメータがありません"
実装は次のようになります。
これが私の唯一の方法だった場合、私は非常によく、敗北を認め、別のアプローチを試みている可能性があります
public class DbLogImpl implements DbLogCustom {
@PersistenceContext
private EntityManager em;
@Override
public Long callInsertLog(Long firstId, Long secondId, Long process, Long subProcess, Long logLevelId, String message, String stacktrace) {
Long logId = null;
StoredProcedureQuery proc = em.createStoredProcedureQuery("logging_pk.insert_log");
proc.registerStoredProcedureParameter(0, Long.class, IN);
proc.registerStoredProcedureParameter(1, Long.class, IN);
proc.registerStoredProcedureParameter(2, Long.class, IN);
proc.registerStoredProcedureParameter(3, Long.class, IN);
proc.registerStoredProcedureParameter(4, Long.class, IN);
proc.registerStoredProcedureParameter(5, String.class, IN);
proc.registerStoredProcedureParameter(6, String.class, IN);
proc.setParameter(0, firstId);
proc.setParameter(1, secondId);
proc.setParameter(2, process);
proc.setParameter(3, subProcess);
proc.setParameter(4, logLevelId);
proc.setParameter(5, message);
proc.setParameter(6, stacktrace);
proc.registerStoredProcedureParameter(7, Long.class, OUT);
proc.execute();
logId = (Long) proc.getOutputParameterValue(7);
return logId;
}
}
私のパッケージには、このようになります。 (実際には出力パラメータの値を取得せずに、ネイティブクエリを処理することができました。)しかし、これとまったく同じようにセットアップされ、うまく動作する別のストアドプロシージャコールがあります。唯一の違いは、パラメータの名前と数です(作業中のものは3つの入力と1つの出力を持ち、最後に出力もあります)。
もう一方がうまくいかない理由はわかりません。
EDIT: 私はこの質問を投稿する前に問題を発見したように、私は質問とは無関係であるコードの多くを省略することにしましたが、私は見つけるために、他の人のためにここにこれを残します。