gpt4 book ai didi

hibernate - 自动在 JPA 实体中设置 createdBy 和 updatedBy

转载 作者:行者123 更新时间:2023-12-04 15:28:07 24 4
gpt4 key购买 nike

我正在开发 JPA(Hibernate implementation of)、Spring 和 Stripes Web 应用程序。我有许多 JPA 实体,它们具有以下共同用于审计和查询目的的字段:

createdBy - 创建实体的人的用户 ID。
createdOn - 创建实体的日期
updatedBy - 上次更新实体的人的用户 ID
updatedOn - 实体上次更新的日期

我已经让我的应用程序正常工作,以便在实体持久化时自动设置 createdOn 和 updatedOn,但我不确定如何填充 createdBy 和 updatedBy 字段,而不必一直通过当前登录的用户 ID从 Controller 类到 DAO。

有没有人对我如何在不到处传递用户 ID 的情况下执行此操作有任何建议?请注意,当前用户 ID 此刻存储在 HttpSession 对象中,因此我的后端需要以某种方式访问​​此数据...

谢谢!

最佳答案

您可以查看以下方法之一,将用户 ID 作为业务层中的上下文传递:

  • How To Pass Context Between Layers With ThreadLocal And EJB 3
  • How To Pass Context In Standard Way - Without ThreadLocal

  • (即使您不使用 EJB,这些帖子也可能仍然相关。第二篇帖子才有意义,但前提是您将 Spring 与 JTA 一起使用)

    我个人不鼓励这些方法,因为我认为它有两个问题:
  • 可测试性:需要在测试中设置上下文数据
  • 契约(Contract):上下文数据参与契约(Contract)使用实体但在界面中不清晰可见。

  • “到处”传递用户 ID 似乎是一项艰巨的工作,但我认为它更简洁。

    要在创建或更新实体时自动设置日期和用户 ID,您可以使用 EntityListener or lifecycle callbacks (也许你已经这样做了)。
    希望能帮助到你...

    关于hibernate - 自动在 JPA 实体中设置 createdBy 和 updatedBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865355/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com