如何在实体更新上设置user_id?

时间:2013-12-16 20:37:46

标签: java hibernate jpa-2.0

我的实体包含updatedAtupdatedBy审核字段。我想仅在实体状态被更改时才设置此字段。因此,对于脏检查,我可以使用Hibernate EmptyInterceptor接口(覆盖onFlushDirty()方法)或JPA监听器(@PreUpdate)。但是我如何在拦截器或监听器中获得当前userId?在我看来有两个解决方案:

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

    < / LI>
  2. 将当前userId设置为public-static ThreadLocal变量,以便我可以从任何地方访问它。

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

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

    感谢。

1 个答案:

答案 0 :(得分:0)

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

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