大きな行を挿入するための安らかなサービスを構築しました。大量の行を挿入するには、バッチで挿入を使用しています。この安らかなサービスのスニペットでデッドロックが発生する原因は何ですか。
final SqlMapClient sqlMapClient = getSqlMapClientTemplate().getSqlMapClient();
sqlMapClient.startTransaction();
sqlMapClient.startBatch();
//data is of size say 10,000 i am dividing into 500 and inserting
do {
data500 = next 500 of data
getSqlMapClientTemplate().insert("insertData", data500);
}while(data500 is not empty)
sqlMapClient.executeBatch();
sqlMapClient.commitTransaction();
しかし、私はこのエラーが発生しています:
説明 : org.springframework.dao.ConcurrencyFailureException: SqlMapClient 操作。SQL []; --- パラメータ マップの適用中にエラーが発生しました。 --- insertData-InlineParameterMap を確認してください。 --- ステートメントを確認してください (更新に失敗しました)。 --- 原因: java.sql.SQLException: トランザクション (プロセス ID 3121) が別のプロセスのロック リソースでデッドロックされ、デッドロックの対象として選択されました。トランザクションを再実行してください。; ネストされた例外は com.ibatis.common.jdbc.exception.NestedSQLException: