【问题标题】:Hibernate @Version and DTO'sHibernate @Version 和 DTO
【发布时间】:2013-03-11 15:35:59
【问题描述】:

Hibernate 与 DTO 一起使用的设计问题。

在我们的一个实体上,我们使用乐观锁定和@Version 注释。当前的问题是,在合并后,版本号直到刷新后才更新。这意味着它发生在我们的 DTO 转换过程之外。我们最终使用旧版本号将转换后的 DTO 发送回客户端。对此的后续操作现在会导致乐观锁失败,因为 Hibernate 会检查不同的数据库版本号。

我已经设法通过一些涉及使用 ThreadLocal 容器和事件侦听器的 hack 来解决这个问题,但我想知道当您使用业务/客户端 DTO 时,关于如何处理系统刷新后更新的属性是否存在公认的最佳实践.

任何想法或想法表示赞赏, 谢谢, 手

【问题讨论】:

  • 在将实体转换为 DTO 之前不能简单地调用 flush() 吗?
  • 道歉应该解释 - 尝试在标准 DAO 框架内执行此操作,因此我想尽可能避免提前刷新,因为我们可能需要应用于所有合并操作。这种行为在我们的系统中可能并不理想。

标签: hibernate version dto


【解决方案1】:

如果实体将被多个客户端同时更新。它确实需要在您的客户端视图中保持最新版本。进行更改时需要刷新它(更新后重新加载)。

如果实体将仅由其所有者更新(而不是同时由多个用户)。您不需要保留最新版本的属性。当您在服务器端进行更新时。您可以加载存储的实体并设置需要使用您的 DTO 更新的属性,并且加载的 PO 可以在事务中自动更新。

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多