无论何时调用我的存储库更新,如何设置我的修改字段?

时间:2014-08-26 11:11:11

标签: java spring jpa spring-data-jpa

我使用的是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的基础结构?

1 个答案:

答案 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);