Spring Boot审核@Query

时间:2019-10-29 10:34:56

标签: spring-boot audit

是否可以使用JPA @Query注释来进行Spring Boot Audit用户? 例如,我有下一个存储库:

@Repository
public interface ItemRepository extends JpaRepository<Item, Long> {
    @Modifying
    @Query(value = "update Item i set statusId = :statusId WHERE i.id = :id")
    void updateById(@Param("id") Long id, @Param("statusId") Long statusId);
}

但是当我在服务中使用它时,它不会更新数据库中的update_date列:

@Autowired
private ItemRepository itemRepository;

@Transactional
public void updateItemStatus(Long itemId, Long statusId) {
    //Case 1: This is working, update_date column is updated
    Item item = itemRepository.findById(itemId).orElseThrow(() -> new ResourceNotFoundException("Item", "id", itemId));
    item.setStatusId(statusId);
    itemRepository.save(item);

    //Case 2: This is not working
    itemRepository.updateById(itemId, statusId);

}

因此,我可以将Audit与@Query注释一起使用吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

审核基于JPA生命周期事件。只有直接操纵实例(持久,合并和删除)的方法才会触发此类事件。

执行查询(进行修改或其他操作)不会触发任何事件,因此不会导致审核发生。

答案 1 :(得分:0)

您遇到语法问题

可以使用

@Query(value = "update Item i set i.statusId = :statusId WHERE i.id = :id")

@Query(value = "update Item set statusId = :statusId WHERE id = :id")