Slick 3交易如何
Slick 3 transaction how to
试图将我的头缠绕在光滑的 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]
我怎样才能得到这个简单的例子运行?
事务性是 DBIO 的功能,
试试这个:
val result = dbConfig.db.run(query.transactionally)
P.S。实际上有一个从 DBIOAction
到 JdbcActionExtensionMethods
的隐式转换,它具有 transactionally
函数
试图将我的头缠绕在光滑的 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]
我怎样才能得到这个简单的例子运行?
事务性是 DBIO 的功能, 试试这个:
val result = dbConfig.db.run(query.transactionally)
P.S。实际上有一个从 DBIOAction
到 JdbcActionExtensionMethods
的隐式转换,它具有 transactionally
函数