0
我一直在試圖從java彈簧調用存儲過程。基本上,這個存儲過程只是將來自用戶的輸入插入到這個表中。從java彈簧mybatis存儲過程調用不工作
這是我的存儲過程:
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行沒有被執行。你們有什麼想法嗎?或者,也許我錯過了一些配置?
感謝您的幫助!