database - 在 Play 2 Scala 中处理事务的常规方法是什么?

标签 database scala playframework playframework-2.0

我在 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/

相关文章:

database - 在 oracle 中停止执行 sqlplus 错误的批处理文件

scala - 在抽象方法的实现上使用 override 关键字

generics - Scala 递归泛型 : Parent[Child] and Child[Parent]

mongodb - 如何在 Play Framework 2.x 操作中使用 MongoDB Async Java 驱动程序?

java - Playframework 结果检查如何工作

Java 如何在两个表中添加数据(关系型数据库)

java - 使用 JCreator 将 Java 连接到 MS Access

scala - 在 Scala 中使用元组

java - 如何在连接 JPA/Ebean 上定义多个条件

php - 如何使用 7.0.7 在 mysql 数据库中插入特殊字符