2017-02-21 123 views
1

我想在PlaySlickScala播放斯卡拉油滑交易

使用transactions我有返回

def updateFirst() 
def updateSecond() 
def updateThird() 

我試圖運行下面的命令布爾值三種不同的方法,但它似乎transactionally命令未找到

val operations = 
    for { 
    _ <- updateFirst() 
    _ <- updateSecond() 
    _ <- updateThird() 
    } yield() 

sync(db.run(operations).transactionally)) 

我的codebase sbt版本與光滑如下:

"com.typesafe.play" %% "play-slick" % "2.0.0", 
"com.typesafe.play" %% "play-slick-evolutions" % "2.0.0", 
"com.typesafe.slick" %% "slick" % "3.0.1", 

即使DBIO沒有顯示任何東西。

任何幫助或領導表示讚賞。

回答

4

這個答案請看:https://stackoverflow.com/a/41624229/2239369

它已經覆蓋了多次已經 - 你只能在交易組合業務,只要他們回到DBIO[T](其中T是你的結果類型)。在你的情況你的方法應該返回:

def updateFirst(): DBIO[Boolean] 
def updateSecond(): DBIO[Boolean] 
def updateThird(): DBIO[Boolean] 

而且你的最後一行應該是:

sync(db.run(operations.transactionally)) 

transactionally叫上DBIO,而不是Future

也看看以下slide:http://slides.com/pdolega/slick-101#/85

+0

如何將我的方法轉換回DBIO [布爾型]?這是樣本同步(db.run(query.update(status)))== 1 ..我嘗試刪除同步和其他東西以及 –

+0

只需轉換同步(db.run(query.update(狀態))) == 1'到這個:'query.update(status).map(_ == 1)' –

+0

非常感謝Pawal。 –