我有很多实体。
对于每个实体,我都有一个扩展CrudRepository
的接口。
使用*Repository.save(entity)
方法保存每个实体。
我想要实现这样的记录器:
log
表:
logdata
表:
save
或delete
方法运行时,MyRepositoryTrigger应编写一条日志消息,其中所有字段都已更改为字段名称和字段值。但是如何写那样的smth?
答案 0 :(得分:4)
对于触发器功能,您必须查看您的数据库,但很可能不会保证CrudRepository
数据库活动的独占性,因为它是在创建/删除/更新表/列时设置的。
如果您希望模仿触发功能,而不需要在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
答案 1 :(得分:1)
您似乎正在尝试为更改实施审核日志。如果您将Spring Data JPA与Hibernate一起使用,我可能会建议您使用Hibernate Envers来解决所有问题。添加maven依赖项,然后在实体(或界面)上添加@Audited
注释,envers将为您审核的每个实体创建一个* _aud表,并自动添加更改日志。
存储用户ID有点棘手,但您可以find example here in the documentation for that as well。