Play中控制器操作之间的事务

时间:2012-03-02 14:41:16

标签: java playframework

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

@play.db.jpa.NoTransaction

然后Play将无法获得该请求的数据库连接。

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

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