Inserção em lote com tabela que possui muitas colunas usando Anorm

Eu estou tentando fazer uma inserção em lote em uma tabela de banco de dados MySQL usando Anorm (na estrutura do jogo 2.3.1). O aplicativo que estou construindo possui um front-end da Web padrão, além de exigir inserções de dados em lote e eu gostaria de tentar manter a lógica na mesma pilha de software.

As inserções vão apenas para as mesmas poucas tabelas.

O número de linhas a serem inseridas de uma vez chegará a centenas e poderá chegar a milhares. Espero que seja necessário limitar o número de linhas inseridas em algum momento devido a anorm / mysql / outros limites.

O driver MySQL que estou usando é mysql-connector-java - 5.1.31

Abaixo está um caso de uso reduzido.

Usando tabela:

CREATE TABLE table1
(
  col1    INTEGER   NOT NULL,
  col2    BIGINT,
  col3    VARCHAR(255)
); 

E código scala:

import play.api.Play.current
import play.api.db.DB
import anorm._ 

object TestInserts {

  DB.withConnection("spo") { implicit conn => 

    val theInserts = Seq(
       Seq[NamedParameter]('val1 -> 1, 'val2 -> Some(1L), 'val3 -> Some("One"))
      ,Seq[NamedParameter]('val1 -> 2, 'val2 -> Some(2L), 'val3 -> Some("Two"))
      ,Seq[NamedParameter]('val1 -> 3, 'val2 -> Some(3L), 'val3 -> Some("Three"))
    )

    val insertBatchSQL = BatchSql( SQL("insert into table1 (col1, col2, col3) values ({val1}, {val2}, {val3})"), theInserts)  

    insertBatchSQL.execute

  } 

}

Eu estou recebendo o seguinte erro

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3688)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3670)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3715)
at com.mysql.jdbc.PreparedStatement.setInt(PreparedStatement.java:3659)
at com.jolbox.bonecp.PreparedStatementHandle.setInt(PreparedStatementHandle.java:828)
at anorm.ToStatement$intToStatement$.set(ToStatement.scala:164)
at anorm.ToStatement$intToStatement$.set(ToStatement.scala:163)
...

Eu olhei para as classes de teste na estrutura do jogo que testam a inserção de lotehttps://github.com/playframework/playframework/blob/master/framework/src/anorm/src/test/scala/anorm/BatchSqlSpec.scala e, tanto quanto posso dizer, deve funcionar da mesma maneira.

Qualquer indicação sobre como corrigir isso ou se eu deveria lidar com isso de uma maneira diferente seria ótimo.

questionAnswers(3)

yourAnswerToTheQuestion