【问题标题】:Intercept spring data jpa annotation @Modifying截取spring数据jpa注解@Modifying
【发布时间】: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


【解决方案1】:

我找到了一个解决方案,不是一个好的解决方案,但它现在可以:我在 EmptyInterceptor(Interceptor 的基本实现)中覆盖了方法 public String onPrepareStatement(String query),并检查了查询是否以“插入”、“更新”开头或“删除”。我需要知道这一点,因为我必须将实体标记为已过期。不过,如果有人有更好的解决方案,请告诉我。

谢谢。

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2018-06-27
    • 2020-07-25
    • 2014-12-24
    • 2015-03-19
    • 2017-11-09
    相关资源
    最近更新 更多