来自java spring的mybatis存储过程调用不起作用

时间:2017-03-06 17:08:35

标签: java spring-mvc stored-procedures plsql spring-mybatis

我一直试图从java spring调用存储过程。基本上,这个存储过程只会在此表中插入用户的输入。

enter image description here

这是我的存储过程:

create or replace PROCEDURE TEST_ADDFT
(
  FID IN RAW
, K IN VARCHAR2 
, V IN VARCHAR2 
) AS 

BEGIN
  INSERT INTO 
    ITCM_FT (FT_ID, KEY_ID, VALUE) 
  VALUES (FID, (SELECT KEY_ID FROM ITCM_KEY_VALUES 
  WHERE UPPER(KEY)=UPPER(K)),V);
END TEST_ADDFT;

所以我已经设置了所需的一切(我认为)。我还将存储过程放在数据库中(为此我使用了sqldeveloper)。

这是服务实现:

@Transactional(readOnly = false, propagation = Propagation.REQUIRED,
        rollbackFor = Exception.class)
public void addTest(final List<TestCost> tcData)
        throws Exception {
    try {
        for (int i = 0; i < tcData.size(); i++) {
            tcData.get(i).setFtId(Utils.generateUUID());
            finalTestDao.addTest(tcData.get(i).getFtId(),
                    tcData.get(i).getKey(), tcData.get(i).getValue());
            System.out.println("-=-=-=-=-= added?");
        }
    } catch (Exception e) {
        Log.error("Add final test error", e);
    }
}

这是我的DAO:

 void addTest(@Param("ftId") String ftId, @Param("key") String key,
        @Param("value") String value);

DAO.xml:

<select id="addTest" parameterType="String" statementType="CALLABLE">
    { 
        CALL TEST_ADDFT (
            #{ftId, mode=IN, jdbcType=RAW},
            #{key, mode=IN, jdbcType=VARCHAR2},
            #{value, mode=IN, jdbcType=VARCHAR2}
        )
    }
</select>

我已经为TestCost对象设置了一个POJO,并使用sqldeveloper测试了所述的过程。

我不明白为什么没有调用该程序。控制台中没有显示错误,但是没有执行来自服务实现(sysout语句)的第10行。你们对此有什么想法吗?或许我确实错过了一些配置?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果您已将tcData声明为最终 ...

final List<TestCost> tcData

那你为什么要更新它??

tcData.get(i).setFtId(Utils.generateUUID());