spring—当方法被@transactional注解时,使用jdbctemplate调用pl/sql frunction时出错

kgsdhlau  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(243)

如果我用@transactions注解方法,就会发生奇怪的行为。代码类似于:

@Transactional(rollbackOn = BookkeepingException.class )
    public VoucherImport importVouchers(Voucher v) {
  String number = anotherService.generateVoucherNumber();
  //Some code here  
}

在另一个service.class中,我有一个调用pl/sql函数的方法。

...
SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate.getJdbcTemplate()).withCatalogName("MY_CATALOG")
                .withFunctionName("GENERATE_V").declareParameters(..)
//Give parameters values here.
    BigDecimal voucherNumber  = call.executeFunction(BigDecimal.class, paramMap);
...

这将产生以下错误:

SQL state [99999]; error code [17041]; Missing IN or OUT parameter at index:: 1; nested exception is java.sql.SQLException: Missing IN or OUT parameter at index:: 1

但是,如果我删除@transactional注解,代码就可以正常工作。在spring类内部进行调试时,我注意到它没有在内部解析参数。知道是什么导致了这种行为吗。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题