2017-03-06 6 views
0

私はjava springからストアドプロシージャを呼び出そうとしています。基本的に、このストアドプロシージャは、このテーブルにユーザーからの入力を挿入するだけです。mybatisストアドプロシージャコールがJavaスプリングから動作しない

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> 

私はすでにTestCostオブジェクトのPOJOを設定しているとsqldeveloperを使用して記述された手順をテストしました。

私が理解できないのは、プロシージャが呼び出されていない理由です。コンソールにエラーは表示されませんでしたが、サービス実装(sysoutステートメント)の行10は実行されていません。皆さん、これについて何か考えていますか?あるいは、私はいくつかの構成が欠けていたでしょうか?

ありがとうございました!

答えて

0

あなたは... 最終として

final List<TestCost> tcData 

をTCDATAを宣言した場合は、なぜあなたはそれを更新していますか..?

tcData.get(i).setFtId(Utils.generateUUID()); 
関連する問題