【问题标题】:How to set user_id on Entity update?如何在实体更新时设置 user_id?
【发布时间】:2013-12-17 05:22:46
【问题描述】:

我有带有updatedAtupdatedBy 审计字段的实体。我只想在实体状态发生更改时设置此字段。因此,对于脏检查,我可以使用 Hibernate EmptyInterceptor 接口(覆盖 onFlushDirty() 方法)或 JPA 侦听器(@PreUpdate)。但是如何在拦截器或侦听器中获取当前的userId?我想到了两个解决方案:

  1. userId 传递给DAO 层,因此我可以创建自定义拦截器,并将其传递给构造函数userId,然后在创建新的Session 时使用此拦截器。

  2. 将当前 userId 设置为 public-static ThreadLocal 变量,这样我就可以从任何地方访问它。

但我认为这两种方法都很丑陋。那么可能存在一些更优雅的方法来解决我的问题吗?

请注意,我不能使用Envers 库(它不符合我们的项目要求)。

谢谢。

【问题讨论】:

    标签: java hibernate jpa-2.0


    【解决方案1】:

    我建议在用户进行身份验证时将 Person 对象存储在 Http 会话中。这样,您可以从会话中获取它并使用实体管理器中的合并功能将其转换回附加实体。

    我个人也在 dao 中将实体分配给需要的域对象,并且不使用@PreUpdate,因为我不希望实体知道如何检索当前用户对象。

    【讨论】:

      猜你喜欢
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 2016-11-16
      • 2022-07-05
      • 2011-03-17
      • 2023-02-06
      • 2021-08-01
      相关资源
      最近更新 更多