【发布时间】:2014-09-24 11:48:16
【问题描述】:
我想审计所有的实体修改,所以我使用了一个实现 org.hibernate.Interceptor 的类。但是,如果我使用此方法删除实体(或多个实体),则不会调用 onDelete 方法:
@Modifying
@Query ("delete from Brand b where b.name= :name")
public void deleteAllByName(Param("name") String name);
有没有办法拦截这种查询?
P.S.:在每次这种查询之前/之后调用拦截器方法不是一个选项,因为有超过 100 个案例,可能会写更多。
谢谢, 泰金。
【问题讨论】:
-
为什么要自己发明而不使用 Hibernate Envers 之类的东西?
-
有很多实体(其他可能由其他开发人员创建),我不想修改(在这种情况下,注释)每一个。从我读过的关于 Hibernate Envers 的内容来看,我应该修改每个实体。我错了吗?
-
因此,您宁愿将解决方案组合/组合在一起,然后使用经过验证的经过良好测试的解决方案。唯一要做的就是需要在需要监控的类上添加
@Audited注解。您甚至可以对实体关系进行特殊审计。 -
我同意你的看法,但这对我来说不是一个有效的解决方案,因为现在正好有 247 个实体。我想在一个地方编写一段代码,以便它易于维护、松散耦合并且无论是否创建新实体都可以工作。
标签: java spring hibernate jpa spring-data-jpa