我的实体包含updatedAt
和updatedBy
审核字段。我想仅在实体状态被更改时才设置此字段。因此,对于脏检查,我可以使用Hibernate EmptyInterceptor
接口(覆盖onFlushDirty()
方法)或JPA监听器(@PreUpdate
)。但是我如何在拦截器或监听器中获得当前userId
?在我看来有两个解决方案:
将userId
传递给DAO图层,因此我可以创建传递给构造函数userId
的自定义拦截器,然后在创建新的Session
时使用此拦截器。
将当前userId
设置为public-static ThreadLocal
变量,以便我可以从任何地方访问它。
但我认为这两种方法都很难看。那么可能存在一些更优雅的方法来解决我的问题?
请注意,我不能使用Envers
库(它不符合我们的项目要求)。
感谢。
答案 0 :(得分:0)
我建议在用户进行身份验证时将Person对象存储在Http会话中。这样,您可以从会话中获取它并使用实体管理器中的合并功能将其转换回附加实体。
我个人也将实体分配给dao中的require域对象,并且不使用@PreUpdate,因为我不希望实体必须知道如何检索当前用户对象。