我的DAO代码如下:
UserDao.scala:
def save(user: User)(implicit session: Session) ... {
....
}
然后是UserService:
def save(user: User) .. {
db.withSession { implicit session =>
userDao.save(user)
}
}
我有其他ABCService类,与我的其他模型具有完全相同的模式。
现在我的问题是,现在我想围绕多个电话创建一个交易,这可能吗?
OtherService:
userService.save(user)
accountService.save(account)
现在,如果其中一个调用失败,我希望它回滚。问题是当前每个Service类中的会话都是独立处理的,所以如果userService.save(user)通过但是accountService.save失败,那么我的数据处于错误状态。
如何解决此问题?
答案 0 :(得分:7)
Slick的withTransaction
与withSession
完全相同,只是一切都在事务中执行。
要求服务功能的签名具有implicit: Session
参数(如果要在事务中使用),并从中删除配置的Session
:
def save(user: User)(implicit: Session) {
userDao.save(user)
}
然后通过Session
提供withTransaction
:
db.withTransaction{ implicit session =>
userService.save(user)
accountService.save(account)
}
答案 1 :(得分:0)
也许您可以查看https://github.com/tim-group/scalaquery_nested
但是他们使用异常来检测包装会话,不确定它是否存在复杂会话/事务嵌套的性能问题。