Vấn đề là, hiện tại, Quill async không hỗ trợ các hoạt động đồng thời bên trong các giao dịch.
Vì vậy, phải thực hiện tuần tự việc chèn động vật:
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
}
ngoài ra, tốt hơn nữa là sử dụng tính năng chèn hàng loạt :)
Cảm ơn @fwbrasil và @mentegy đã hỗ trợ!