2017-03-27 16 views
0

では動作しません。私は私のような簡単なMyBatisのコンフィギュレーションを作成したそうするために、テーブルの多くのレジスタを複製する必要があります。SQL文は、MyBatisの3.3.2

<insert id="copy" parameterType="hashmap" useGeneratedKeys="true" keyColumn="id"> 
    INSERT INTO ${table} 
    <foreach item="key" collection="keys" index="index" open="(" separator="," close=")"> 
     ${key} 
    </foreach> 
    VALUES 
    <foreach item="key" collection="map" index="index" open="(" separator="," close=")"> 
     ${key} 
    </foreach> 
</insert> 

ので、アプローチがにあります行を選択し、キーとJavaコードのいくつかの要素を変更してから挿入します。しかし場合は、このトレースで失敗します。

org.springframework.dao.DuplicateKeyException: 
### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Invalid argument(s) in call 
### SQL: INSERT INTO XYZ  (   ...) 
### Cause: java.sql.SQLIntegrityConstraintViolationException: Invalid argument 
; SQL []; Argumento(s) no válido(s) en la llamada; nested exception is java.sql.SQLIntegrityConstraintViolationException: Invalid argument(s) in call 
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:241) 

しかし、私は、ログからSQLをコピーしてのsqldeveloperでそれを実行した場合、それはつまり、どのように動作しますか?代わりに、通常の場合はojdbc6.jarのojdbc6dms_g.jar Oracleドライバを使用することにより

+1

は、DuplicateKeyExceptionヒントではありませんか?パラメータ値をSQL文字列に追加するのではなく、バインドするために '#{key}'を使用するほうが、SQLインジェクションやハンドルタイプの問題を回避できます。 – blackwizard

+0

DuplicateKeyExceptionはデータベースエラーです。 #を使用する場合、列の名前は文字列でSQLインジェクションには適さず、値の型はコードで処理されますが、異なるテーブルを扱う一般的な方法です – user311174

答えて

0

、私はシンボルでデバッグすると、それは私がkeyColumn="id"で導入された「ID」列を探していた気づいたことができ、私はそれを削除し、

以来働いていました
関連する問題