Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Falha ao usar transações no Quill para inserir objetos relacionais um-para-muitos


O problema era que, atualmente, o Quill assíncrono não suporta operações simultâneas dentro de transações.

Então teve que fazer a inserção do animal sequencialmente:
ctx.transaction { implicit ec =>
  for {
    personId <- ctx.run(insertPersonQuery)
    animals = personCreate.animals.map(Animal.apply(personId, _))
    _ <- animals.foldLeft(Future.successful(0l)) {
      case (fut, animal) =>
        fut.flatMap(_ => insertAnimal(animal))
    }
  } yield personId
}

também, melhor ainda é usar a inserção em lote :)

Obrigado @fwbrasil e @mentegy pela ajuda!