2017-03-06 79 views
0

我一直在试图从java弹簧调用存储过程。基本上,这个存储过程只是将来自用户的输入插入到这个表中。从java弹簧mybatis存储过程调用不工作

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> 

我已经成立了一个POJO的TestCost对象和测试了使用sqldeveloper声明的过程。

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

感谢您的帮助!

回答

0

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

final List<TestCost> tcData 

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

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