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 应用程序中的安全审计查找日志注入