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ドライバを使用することにより
は、DuplicateKeyExceptionヒントではありませんか?パラメータ値をSQL文字列に追加するのではなく、バインドするために '#{key}'を使用するほうが、SQLインジェクションやハンドルタイプの問題を回避できます。 – blackwizard
DuplicateKeyExceptionはデータベースエラーです。 #を使用する場合、列の名前は文字列でSQLインジェクションには適さず、値の型はコードで処理されますが、異なるテーブルを扱う一般的な方法です – user311174