2016-03-23 100 views
0

我是斯卡拉新手,並且已經學習浮油(3.1.1)。在寫入特定代碼以將數據插入到表中時,如果不存在,則必須插入一行,否則請更新該表中的特定列。對於單個行更新我寫了下面的代碼,它工作正常:插入使用浮油不起作用

def updateDate(id: Int, country : Country, lastDate: DateTime)(implicit ec: ExecutionContext) = 
     byPKC.applied((id, country,)).map(_.lastMessageDate).update(lastDate) flatMap { 
      case 0 ⇒ 
      create(User.withLastDate(id, country, lastDate)) 
      case x ⇒ DBIO.successful(x) 
     } 

現在我不確定如何做一個批量操作中階此。我嘗試了以下方法,即使效率低下,也應該可以工作,但是沒有將行插入表中。

def updateDates(ids: Set[Int], country: Country, lastDate: DateTime)(implicit ec: ExecutionContext) = { 
    ids.foreach(e ⇒ updateDate(e, country, lastDate)) 
    DBIO.successful(1) 
    } 

如何在scala中進行批量寫入?另外,爲什麼這種批量操作不起作用?任何幫助將非常感激。

回答

0

由兩部分組成的問題的答案。

如何在scala中進行批量寫入?

您不能在SQL中執行批量更新;它根本不被支持。不過,您可以批量插入。 Slick支持在TableQuery上使用++=運營商的批量插入。

爲什麼批量操作不起作用?

您正在生成DBIO值,但是您沒有通過db.run()執行它們。 DBIO是Scala操作到SQL的映射,但必須在將其發送到數據庫之前執行它。