【发布时间】:2018-11-08 01:07:38
【问题描述】:
在光滑的according to docs 中发出事务查询的方法是在DBIOAction 实例上调用transactionally。但是,在我的情况下,只有产生错误的操作没有被执行。序列中其他操作引入的更改(发生在失败操作之前但不在失败之后)将写入数据库而不是回滚。
def runTx(db: Database, queries: Iterable[DBIOAction[Int, NoStream, Effect]])(
implicit ec: ExecutionContext
): Future[Try[Iterable[Int]]] = {
val combined: DBIOAction[Iterable[Int], NoStream, Effect] = DBIO.sequence(queries)
val tx: DBIOAction[Try[Iterable[Int]], NoStream, Effect with Effect.Transactional] =
combined.transactionally.asTry
db.run(tx)
}
我想关联存储在多个表中但必须完全存储或根本不存储的传入数据。
DBActions 是插入,使用 sql 插值器创建。
我已确认尽管单元测试和外部工具的个别操作失败,但数据仍在写入和保留。
slick 3.2.3 与 mysql 5.7.22。
如果其中一个查询失败,我可以做些什么来保证事务性并回滚序列的所有查询?
【问题讨论】:
标签: mysql scala transactions slick