繁体   English   中英

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

[英]mybatis stored procedure call from java spring not working

我一直在尝试从Java Spring调用存储过程。 基本上,此存储过程只是将来自用户的输入插入此表中。

在此处输入图片说明

这是我的存储过程:

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声明的过程。

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

谢谢您的帮助!

如果您已将tcData声明为final ...

final List<TestCost> tcData

那你为什么要更新它..?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM