java - 如何实现触发Spring-Data Repository的Before/After save方法

标签 java spring hibernate spring-data

我有大量的实体。 对于每个实体,我都有一个扩展 CrudRepository 的接口(interface)。 每个实体都使用 *Repository.save(entity) 方法保存。

我想实现这样的记录器:

  • 有一个独立的日志数据库,有两个表:log 和 logdata
  • log 表:
    • 创建
    • 用户名
  • logdata 表:
    • 日志编号
    • 字段名
    • 值(字符串)
  • savedelete 方法运行时,MyRepositoryTrigger 应该写入一条日志消息,其中所有字段的名称和字段值都已更改。

但是这样怎么写呢?

最佳答案

对于触发器功能,您必须查看您的数据库,但很可能它不能保证您的 CrudRepository 数据库 Activity 的排他性,因为它是在创建/删除/更新表/列时设置的。

相反,如果您想模仿触发器功能,这意味着无需每次都在 CrudRepository#save()/delete() 功能之前/之后进行设置,那么您会更好关闭使用 Spring AOP 功能

@After("execution(* my.CrudRepository.save(..))")
public void log(JoinPoint point) {
    log.info(point.getSignature().getName() + " was called..");
}

你可以找到extensive Spring AOP programming documentation in the Spring Docs

关于java - 如何实现触发Spring-Data Repository的Before/After save方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575593/

相关文章:

java - java对象到对象映射的任何工具?

java - POI 生成的 Excel 工作簿在链接时不起作用

java - 访问我的自定义 View ( inflated layout )中的组件?

java - 扩展类时膨胀错误

java - Mysql 和 Hibernate 以及 Lob 列

java - StateMachineBuilder 计时器崩溃

Javax @NotNull 注解用法

java - 如何将 servlet contextPath 与 PropertySource 一起使用?

Java Hibernate.merge 在任何情况下都可能返回 null 吗?

java - 如何在 Hibernate 中复制引用?