当前位置: 首页 > 知识库问答 >
问题:

如何实现Spring Data Repository的触发器之前/之后保存方法

公孙弘图
2023-03-14

我有很多实体。对于每个实体,我都有一个扩展crudepository的接口。每个实体都使用*存储库保存。保存(实体)方法。

我想实现这样的记录器:

  • 有一个单独的日志数据库和两个表:log
  • 日志id
  • 字段名
  • (字符串的)值

但是怎么写smth呢?

共有2个答案

轩辕佑运
2023-03-14

看起来您正在尝试实现更改的审核日志。如果您在Hibernate中使用Spring Data JPA,我建议您使用Hibernate Envers,它可以解决所有问题。添加maven依赖项,然后在实体(或界面)上添加@Audited注释,envers将为您审计的每个实体创建一个*_aud表,并自动添加changelog。

存储用户id有点棘手,但您也可以在文档中找到相关示例。

单于阳
2023-03-14

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

相反,如果你想模拟触发功能,即在crudepository#save()/delete()功能之前/之后不必每次都设置触发功能,那么你最好使用Spring AOP功能

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

您可以在Spring文档中找到大量Spring AOP编程文档

 类似资料:
  • 问题内容: 我正在使用jQuery和jQuery UI。我体验到用户有时会多次触发ajax调用,因为触发调用的按钮/链接在单击后不会立即被禁用。为了防止这种情况的发生,现在我在“ beforeSend”操作中禁用按钮/链接。 这是典型的Ajax Call对我来说的样子: 但是我不想在每个Ajax调用中添加此按钮禁用逻辑。有什么办法全局定义每次在/ after和ajax-call之前都会被调用的函数

  • 本文向大家介绍tensorflow如何继续训练之前保存的模型实例,包括了tensorflow如何继续训练之前保存的模型实例的使用技巧和注意事项,需要的朋友参考一下 一:需重定义神经网络继续训练的方法 1.训练代码 第一次训练截图: 2.恢复上一次的训练 使用上次保存下的数据进行继续训练和保存: #最后要提一下的是: checkpoint文件 meta保存了TensorFlow计算图的结构信息 da

  • 我有一个表单,其中有一条错误消息,如下例所示: http://codepen.io/anon/pen/dYWyEM?editors=101 重现问题的步骤如下: 打开coDepen链接后, 1)专注于输入领域 2) 按提交按钮 3) 由于首先触发模糊事件,因此首先隐藏错误消息,从而更改提交按钮的位置。因此,点击事件根本没有注册,我需要再次点击以提交表单。 有没有办法先发送提交事件? 我需要检测触发

  • 也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?

  • 因为我们知道progressdialog需要一个参数上下文或获取片段的活动,但在解除对话框后,它转到了另一个片段,我将其设置为mainactivity默认片段为homepage 这是我课堂上使用的方法

  • 有父子两个组件 父子都有一个数组 父组件的数组list更新, 子组件的数组tableData会跟着更新,并显示在表格上. 现在有个新增的按钮, 要求在新增时 先更新一下表格 再插入新的一行. 但是更新表格是在父组件请求,子组件通过useEffect跟着更新,导致新增时插入的一行被覆盖了(useEffect更新的逻辑比插入逻辑晚导致被覆盖),要怎么处理. 一个办法是把新增一行的逻辑移到useEffe