Playframework 使用Slick 3.0在同一事务中进行多个插入 我正在使用SLIK2.1.0升级Slay框架应用程序,以播放SLIC1.0.0(包括SLIC3.0.0)。
我在理解如何处理交易时遇到了一些问题 假设我有以下代码:Playframework 使用Slick 3.0在同一事务中进行多个插入 我正在使用SLIK2.1.0升级Slay框架应用程序,以播放SLIC1.0.0(包括SLIC3.0.0)。,playframework,slick,play-slick,Playframework,Slick,Play Slick,我在理解如何处理交易时遇到了一些问题 假设我有以下代码: db.withTransaction { implicit session => for (id <- ids) yield someTable.insert(SomeObject(id)) } db.withTransaction{implicit session=> 对于(id,根据,您可以在db操作上使用。事务性: val a = (for { ns <- coffees.filter(_.name.
db.withTransaction { implicit session =>
for (id <- ids) yield someTable.insert(SomeObject(id))
}
db.withTransaction{implicit session=>
对于(id,根据,您可以在db操作上使用。事务性
:
val a = (for {
ns <- coffees.filter(_.name.startsWith("ESPRESSO")).map(_.name).result
_ <- DBIO.seq(ns.map(n => coffees.filter(_.name === n).delete): _*)
} yield ()).transactionally
val f: Future[Unit] = db.run(a)
val a=(用于{
ns我有一个稍微不同的场景,我必须在同一事务中更新两个表,下面的代码似乎是实现这一点的最优雅的方式:
val c: DBIOAction[(Int, Int), NoStream, Effect.Write with Effect.Write] = for{
i1 <- (tbl1 += record1)
i2 <- (tbl2 += record2)
} yield {
(i1,i2)
}
val f = db run c.transactionally
在最初的用例中,您可以简单地用自己的代码构造动作以供理解。这不起作用。似乎不再存在函数insert
。我尝试将其替换为+=
,但这也不起作用。经过一番尝试后,我得出了以下结论:val toInsert=for(id
val c: DBIOAction[(Int, Int), NoStream, Effect.Write with Effect.Write] = for{
i1 <- (tbl1 += record1)
i2 <- (tbl2 += record2)
} yield {
(i1,i2)
}
val f = db run c.transactionally
val actions = Seq((tbl1 += record1), (tbl2 += record2))
val dbActions: DBIOAction[Seq[Int], NoStream, Effect.Write with Effect.Transactional]
= DBIOAction.sequence(actions).transactionally
val f = db run dbActions