Mysql
 sql >> Database >  >> RDS >> Mysql

Impossibile utilizzare le transazioni in Quill per INSERIRE oggetti relazionali uno-a-molti

Il problema era che, al momento, Quill async non supporta operazioni simultanee all'interno delle transazioni.

Quindi ho dovuto fare l'inserimento dell'animale in sequenza:

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
}

inoltre, è ancora meglio usare l'inserimento batch :)

Grazie per @fwbrasil e @mentegy per l'assistenza!