【问题标题】:Updating Row in Slick 3.0.0-RC3, using在 Slick 3.0.0-RC3 中更新行,使用
【发布时间】:2015-04-09 19:33:41
【问题描述】:

这就是我使用 Slick 2.1 更新表格行的方式,

private def updateEntity(id: Long, row: TTable#TableElementType) = {
        db.withSession { implicit session =>
          val result = query.filter(_.id === id).update(row)             
          result.toLong
        }
      }

升级到 Reactive Slick 后,db.withSession 显示弃用警告,因为 withSession 已弃用。是什么 用于更新行的基于操作的 api 语法。

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    Slick 3.0 使用纯函数式、单子 I/O,没有副作用。在基于 Action 的 API 中,您必须使用 db.run,它将采用 Query 并返回 Future

    所以在你的情况下,它将是

    private def updateEntity(id: Long, row: TTable#TableElementType): Future[Long] = {
        db.run(query.filter(_.id === id).update(row)).map(_.toLong)
        }
      }
    

    【讨论】:

    • 感谢@mohit 它显示找不到隐式参数会话,再求一个帮助,如何编写返回最后插入记录的插入方法...
    • 在 Slick 3.0 和 Slick 2.1 中编写查询的方式没有区别。唯一的区别是,不是直接获得结果,而是在 Future 中获得结果,而不是 db.withSession ..... 您将使用 db.run。所以要获取最后插入的记录,例子在slick.typesafe.com/doc/3.0.0-RC3/queries.html#inserting
    • 是的,我必须import slick.driver.PostgresDriver.api._,我有一个扩展驱动程序,这是导致问题的原因,现在我解决了。谢谢。
    • 有什么方法可以按行进行插入或更新吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    相关资源
    最近更新 更多