拦截spring data jpa注解@Modifying

问题描述 投票:0回答:2

我想审核所有实体修改,所以我使用了一个实现 org.hibernate.Interceptor 的类。但是如果我使用此方法删除实体(或多个实体),则不会调用 onDelete 方法:

@Modifying
    @Query ("delete from Brand b where b.name= :name")
    public void deleteAllByName(Param("name") String name);

有没有办法拦截此类查询?

P.S.:在每次此类查询之前/之后调用拦截器方法不是一个选择,因为有超过 100 个案例,并且可能会编写更多。

谢谢, 泰金。

java spring hibernate jpa spring-data-jpa
2个回答
0
投票

我找到了一个解决方案,不是一个好的解决方案,但现在可以了:我重写了 EmptyInterceptor (拦截器的基本实现)中的方法

public String onPrepareStatement(String query)
并检查查询是否以 'insert'、'update' 或 ' 开头删除'。我需要知道这一点,因为我必须将一个实体标记为已过期。不过,如果有人有更好的解决方案,请告诉我。

谢谢你。


0
投票

您可以使用AOP并通过@Modifying注解拦截所有方法。

© www.soinside.com 2019 - 2024. All rights reserved.