Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Versäumnis, Transaktionen in Quill zu verwenden, um relationale Eins-zu-Viele-Objekte einzufügen

Das Problem war, dass Quill Async derzeit keine gleichzeitigen Vorgänge innerhalb von Transaktionen unterstützt.

Also musste das Einfügen der Tiere nacheinander erfolgen:

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
}

Außerdem ist es noch besser, die Stapeleinfügung zu verwenden :)

Danke für @fwbrasil und @mentegy für die Hilfe!