2017-03-06 27 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());