【问题标题】:Jpa and rollback: a pattern to preserve entity consistencyJpa 和回滚:保持实体一致性的模式
【发布时间】:2015-07-14 19:30:31
【问题描述】:

考虑以下使用 Jpa 进行持久化的场景。 学生可以通过 Web 表单关联到不同的课程。 所以这个表单显示了不同的实体(学生、课程)。

保存按钮按下,业务逻辑修改实体部分字段,db操作失败。

不幸的是,内存中的实体反映了业务逻辑所做的更改,这可能会产生一些不一致的问题。 有没有在类似情况下有用的模式?

我认为的可能解决方案以及我不喜欢它们的原因:

  • 不想在数据库异常的情况下恢复对业务逻辑所做的所有更改,因为这是一个容易出错的工作。
  • 不想在 db 异常之后重新加载实体,以确保它们与 db 对齐。事实上,这个操作也可能会失败。

否则我可以克隆实体,进行更改并在成功提交后将克隆与原始实体交换。

无论如何,遵循一个完善的模式,我会更舒服。

【问题讨论】:

  • 公认的模式是重新加载实体。如果失败,则基本上意味着您的数据库或网络已关闭,或者应用程序存在错误,并且应用程序对此无能为力。
  • 我对在回滚时重新加载实体的想法。这是一种有效的方法,因为大多数时候服务器没有额外的工作要做。实体恢复到一致状态,这很好。不幸的是,如果数据库出现临时故障,则重新加载也会失败,并且实体仍处于错误状态,如前所述。在这种情况下可以做什么?将实体设置为 null 可能会导致业务逻辑中出现其他异常,但让用户远离他正在填写的表单可能很有用!?
  • 如果出现临时故障,您会向用户显示一条大红色消息,表示无法再访问数据库,并带有尝试刷新页面的链接。

标签: jpa design-patterns rollback


【解决方案1】:

备忘录模式是一种设计模式,旨在为内存中对象的状态提供“回滚”功能。您需要一个看守类,它向主题询问纪念品,然后尝试持久性。然后看守人会将纪念品还给对象,并告诉它在必要时回滚到纪念品描述的状态。

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 2015-11-03
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2011-01-07
    • 2021-03-24
    相关资源
    最近更新 更多