Spring Boot 审计@Query

Posted

技术标签:

【中文标题】Spring Boot 审计@Query【英文标题】:Spring Boot audit @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 注释的审计吗?

谢谢。

【问题讨论】:

【参考方案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")

【讨论】:

以上是关于Spring Boot 审计@Query的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Actuator:健康检查审计统计和监控

如何操纵我的审计项目以在 Spring Boot 中持续存在

如何解决 java spring boot 应用程序中的安全审计查找日志注入

如何跨单个项目的不同 Spring Boot 微服务实现 JPA 审计?

DEDECMS V5.1 审计学习

Spring + Hibernate 审计(无 Spring Data)