【发布时间】:2020-03-02 15:26:45
【问题描述】:
我正在将一些 Scala 代码从 Squeryl 迁移到 Slick。一切都很顺利,直到我碰到交易的话题。 Squeryl 使处理事务变得非常简单:您只需将代码(无论是否与 DB 相关)包装在 transaction 块中即可。
从我可以在网上收集的示例来看,似乎有人希望重新构建整个项目,使其能够很好地使用它的一元方法和理解,这是我真正想避免的事情。
考虑一段任意代码,例如:
def f(): Unit = {
UserRepository.getUser()
... some imperative code
ServiceRepository.getServer()
...
ServerRepository.updateServer(...)
...
UserRepository.insertNewUser(...)
}
有没有一种方法可以轻松地将其包装在某种事务块中,而无需更改方法的内部逻辑?
【问题讨论】:
-
我相信如果您使用
.transactionally,您将无法在调用之间压缩其他代码。不确定是否有其他选项可以强制执行数据库事务