【问题标题】:Transaction between controller actions in PlayPlay 中控制器动作之间的事务
【发布时间】:2012-03-03 00:01:27
【问题描述】:

有没有办法在几个控制器动作之间启动“事务”,以保持模型更改,但除非所有动作都完成,否则不保存它们?

假设我有以下用户流程:step1 -> step2 -> step3 -> step4 在每个步骤中,用户都会填写一些数据,并且每个步骤都有一个“取消”按钮,该按钮需要取消向导以及之前步骤的所有更改。

由于我们不希望每一步都将所有填充的数据传递到下一步以便仅在最后一步保存到数据库 - 每一步都会创建或更改一个或多个模型实例并将它们存储在数据库中。点击“取消”后,我们如何恢复之前所有步骤的更改?

理想情况下,我们希望在步骤 1 中调用一些“TransactionSupport.startTransaction”,在步骤 4 中调用“TransactionSupport.endTransaction”。但考虑到每个步骤请求可能会发送到不同的 Play 服务器 - 我们将如何在服务器之间存储此事务?

【问题讨论】:

    标签: java playframework


    【解决方案1】:

    根据文档,并且知道 Play 是无状态的,这似乎是不可能的。实际上,如果您通过以下注释禁用 Play 的默认事务管理器:

    @play.db.jpa.NoTransaction
    

    那么 Play 将不会为该请求获取数据库连接。

    为解决您的问题,一种可能的解决方法是将步骤信息存储在临时表中,最后仅将数据提交到“工作”表中。

    将信息链接到用户 ID、向导 ID 和会话 ID,以便您检测过时的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多