1
我有一个使用JPA的自定义实现来调用存储过程的弹簧启动应用程序。问题是,当执行调用时,我得到“在index :: 7处缺少IN或OUT参数”。“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个输出,最后也是输出)。
我不明白为什么一个工作正常,而另一个没有。
编辑: 因为我发现张贴了这个问题之前的问题,我决定省略了很多的代码是无关的问题,但我会在这里把这个留给他人找到。