我正在尝试在Slick中使用事务来简化我正在编写的一些集成测试的数据库状态的设置和拆除。代码看起来像这样:
val actions = for {
_ <- setUpTables
data <- readDataWeWantToAssertOn
_ <- DBIO.failed(new RuntimeException("ROLLBACK"))
} yield {
data
}
db.run(actions.transactionally).map { data =>
asset(data.size == 1)
}
我正在使用数据库回滚来重置数据库状态。但是,我的问题是我不知道如何回滚那一系列操作,同时仍然产生在事务中已读取的中间数据库结果。
我有一个使用scala.concurrent.Promise
来“推”中间结果的解决方法,但我想知道是否有任何方法可以使用Slick来做到这一点。
我还查看了andFinally
和cleanUp
组合器,它们忽略了最后一个结果并产生了倒数第二个结果,但这只适用于最后一个动作不是错误的情况,这在我的case需要是一个错误,以便回滚事务。