【问题标题】:Spring Boot audit @QuerySpring Boot 审计@Query
【发布时间】:2020-02-24 14:11:23
【问题描述】:

可以使用 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);

}

那么,我可以使用带有@Query 注释的审计吗?

谢谢。

【问题讨论】:

    标签: spring-boot audit


    【解决方案1】:

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

    查询的执行、修改或其他方式不会触发任何事件,因此不会导致审计发生。

    【讨论】:

      【解决方案2】:

      你有语法问题

      任意使用

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

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

      【讨论】:

        猜你喜欢
        • 2018-04-02
        • 2019-01-27
        • 2019-04-13
        • 2016-05-27
        • 2020-08-31
        • 2020-02-20
        • 2018-01-07
        • 1970-01-01
        • 2017-07-09
        相关资源
        最近更新 更多