我在 Play 2.1 Scala 项目中使用 JDO 进行数据存储。理想情况下,我希望每个请求都有自己的事务,在完成时提交,并在出现问题时回滚。
我能想到的最好的方法是使用 Action Composition,我在其中创建自己的 Action
类似启动事务的对象,将代码块包装在 Action
中,对其求值并保存结果,提交或回滚事务,然后返回结果。
唯一让我担心的是我的整个项目现在由 DbAction
组成s 而不是常规 Action
秒。我不确定为什么这让我担心,除了我认为必须有一个更好的地方来做这件事。但是,当我检查 GlobalSettings
中可用的 Hook 时, 看起来没什么用。
我应该直接使用 DbAction
吗?并停止猜测自己,或者是否有一个地方可以 Hook 这种行为,这样我就可以使用 Action
?
托德
最佳答案
我不知道它是否是更好的选择,但您也可以使用 Action Composition而不是通过继承创建子类。
基本上,你可以这样写:
def TransactionalAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
Action { request =>
startTransaction
try {
f(request)
commit
} catch {
case e: Exception => rollback
}
}
}
然后使用:
def index = TransactionalAction { request =>
val something = someQueriesInDB
Ok(something)
}
关于database - 在 Play 2 Scala 中处理事务的常规方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001678/