我使用的是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
的基础结构?
答案 0 :(得分:0)
基于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);