我一直试图从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测试了所述的过程。
我不明白为什么没有调用该程序。控制台中没有显示错误,但是没有执行来自服务实现(sysout语句)的第10行。你们对此有什么想法吗?或许我确实错过了一些配置?
感谢您的帮助!
答案 0 :(得分:0)
如果您已将tcData声明为最终 ...
final List<TestCost> tcData
那你为什么要更新它??
tcData.get(i).setFtId(Utils.generateUUID());