Database 玩Scala流畅的交易
我想在Database 玩Scala流畅的交易,database,postgresql,scala,playframework,slick,Database,Postgresql,Scala,Playframework,Slick,我想在PlaySlickScala 我有三种不同的方法返回布尔值 def updateFirst() def updateSecond() def updateThird() 我正在尝试运行下面的命令,但似乎在事务上找不到命令 val operations = for { _ <- updateFirst() _ <- updateSecond() _ <- updateThird() } yield () sync(db.run(o
Play
Slick
Scala
我有三种不同的方法返回布尔值
def updateFirst()
def updateSecond()
def updateThird()
我正在尝试运行下面的命令,但似乎在事务上找不到命令
val operations =
for {
_ <- updateFirst()
_ <- updateSecond()
_ <- updateThird()
} yield ()
sync(db.run(operations).transactionally))
甚至DBIO也没有显示任何内容
感谢您的任何帮助或指导。请看以下答案:
它已经被讨论过多次了-您只能在事务中编写操作,只要它们返回DBIO[T]
(其中T
是您的结果类型)。在您的情况下,您的方法应该返回:
def updateFirst(): DBIO[Boolean]
def updateSecond(): DBIO[Boolean]
def updateThird(): DBIO[Boolean]
此外,您的最后一行应该是:
sync(db.run(operations.transactionally))
(事务性地
在DBIO
上调用,而不是在Future
上调用)
另请看下面的幻灯片:看一下这个答案:
它已经被讨论过多次了-您只能在事务中编写操作,只要它们返回DBIO[T]
(其中T
是您的结果类型)。在您的情况下,您的方法应该返回:
def updateFirst(): DBIO[Boolean]
def updateSecond(): DBIO[Boolean]
def updateThird(): DBIO[Boolean]
此外,您的最后一行应该是:
sync(db.run(operations.transactionally))
(事务性地
在DBIO
上调用,而不是在Future
上调用)
另请看下面的幻灯片:如何将方法return转换为DBIO[Boolean]?这是示例同步(db.run(query.update(status))==1。。我也尝试过删除同步和其他内容,只需将sync(db.run(query.update(status))==1
转换为:query.update(status).map(==1)
非常感谢。我如何检查事务是否已成功完成?请在Future的方法中检查它(如果发生异常,您应该在此处捕获异常)如何将我的方法返回转换为DBIO[Boolean]?这是示例同步(db.run(query.update(status))==1..我已尝试删除同步和其他内容,只需将sync(db.run(query.update(status))==1转换为以下内容:query.update(status).map(\u==1)
非常感谢。如何检查事务是否已成功完成?请在未来的方法的恢复中进行检查(如果发生异常,您应该在此处捕获异常)