sql >> Base de Datos >  >> RDS >> Mysql

No se pueden usar transacciones en Quill para INSERTAR objetos relacionales de uno a muchos

El problema era que, actualmente, Quill async no admite operaciones simultáneas dentro de transacciones.

Así que tuve que hacer la inserción del animal secuencialmente:

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
}

además, aún mejor es usar la inserción por lotes :)

¡Gracias por @fwbrasil y @mentegy por la ayuda!