【问题标题】:Slick 3 transaction how toSlick 3 交易如何
【发布时间】:2015-11-21 12:51:11
【问题描述】:

试图用光滑的 3 api 来解决我的问题。

我有这些方法签名:

  def findById(id: Long): DBIO[Option[Project]] =
Projects.filter(_.id === id).result.headOption

  def insert(Task: Task): DBIO[Long] =
Tasks returning Tasks.map(_.id) += Task

我想在我的控制器中的单个事务中运行。

我的代码目前看起来像这样并且不是事务性的:

def addTaskToProject(taskName: String, projectId: Long) = Action.async { implicit rs =>

  val query = for {
    Some(project) <-  projectDAO.findById(projectId)
    id <- taskDAO.insert(Task(0, "blue", project.id))
  }yield id

  val result = dbConfig.db.run(query)

  result.map{ taskId =>
    Ok("I have created a new task: " + taskId)
  }
}

1) 我试着这样做:

val result = dbConfig.db.run(query).transactionally

但这给了我这个错误:

... value transactionally is not a member of scala.concurrent.Future[Long]

2)然后我尝试了这个:

val result = dbConfig.db.run(query.transactionally)

得到了这个错误:

... value transactionally is not a member of slick.dbio.DBIOAction[Long,slick.dbio.NoStream,slick.dbio.Effect.All with slick.dbio.Effect.All]

我怎样才能让这个简单的例子运行?

【问题讨论】:

    标签: scala playframework slick


    【解决方案1】:

    事务性是 DBIO 的功能, 试试这个:

    val result = dbConfig.db.run(query.transactionally)
    

    附:实际上有一个从 DBIOActionJdbcActionExtensionMethods 的隐式转换,它具有 transactionally 函数

    【讨论】:

    • 感谢您的提示。还没有工作(见问题)。我将如何应用隐式转换?
    • 找到了。问题是缺少这个:import dbConfig.driver.api._
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多