Insertar lote con tabla que tiene muchas columnas usando Anorm

Estoy tratando de hacer una inserción por lotes en una tabla de base de datos MySQL usando Anorm (en el marco de juego 2.3.1). La aplicación que estoy construyendo tiene una interfaz web estándar además de requerir inserciones de datos por lotes y me gustaría intentar mantener la lógica en la misma pila de software.

Los insertos solo van en las mismas pocas tablas.

El número de filas que se insertarán a la vez alcanzará cientos y puede llegar a miles, espero que necesite limitar el número de filas insertadas en algún momento debido a anorm / mysql / otros límites.

El controlador MySQL que estoy usando es mysql-connector-java - 5.1.31

A continuación se muestra un caso de uso reducido.

Usando tabla:

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

Y 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

  } 

}

Estoy teniendo el siguiente error

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)
...

Miré las clases de prueba en el marco de juego que prueban la inserción por loteshttps://github.com/playframework/playframework/blob/master/framework/src/anorm/src/test/scala/anorm/BatchSqlSpec.scala y por lo que puedo decir, debería funcionar igual.

Cualquier sugerencia sobre cómo solucionar esto o si debería abordar esto de una manera diferente sería genial.

Respuestas a la pregunta(3)

Su respuesta a la pregunta