【问题标题】:How set my modified by field whenever my repository updates are called?每当调用我的存储库更新时,如何设置我的修改字段?
【发布时间】:2014-08-26 11:11:10
【问题描述】:

我正在使用 spring jpa 数据。我想管理一个实体的 modifiedBy 字段。我正在使用拦截器,它在我提取实体、更改某些内容并将实体保存回存储库时起作用。但是当我使用直接更新查询时,不会调用拦截器。

@Modifying
@Query("UPDATE User u SET u.password = ?2 WHERE u.id = ?1 ")
public void updatePassword(Long userId, String encodePassword);

还尝试在this 帖子中使用AuditEntityListener,但同样的问题。如何创建一个基础架构,以便在调用我的存储库更新时设置我的modifiedBy

【问题讨论】:

    标签: java spring jpa spring-data-jpa


    【解决方案1】:

    基于EntityListener 的方法将不起作用,因为 API 是基于加载到持久性上下文中的实体实例。这似乎是您要明确避免的。唯一的选择是在查询定义中显式手动设置日期:

    @Modifying
    @Query("UPDATE User u SET u.password = ?2, u.modifiedBy = CURRENT_TIMESTAMP" +
           " WHERE u.id = ?1 ")
    void updatePassword(Long userId, String encodePassword);
    

    【讨论】:

    • 我就是这么做的。我希望有更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 2018-12-03
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2010-10-19
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多