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

即使JPA实体不脏,我也可以强制spring数据更新可审核字段吗?

农永宁
2023-03-14

我正在使用Spring-data-jpa进行审计。我本质上想“触摸”我的实体——我想更新@LastModifiedDate和@LastModifiedBy字段,即使我没有对对象进行任何更改。

本质上,我希望将这两个字段改为“LastAccessedBy”和“LastAccessedDate”。

是否有一种方法可以触发Spring数据/JPA将实体写入DB(从而触发Spring数据审核模块),即使实体没有脏?

或者,我唯一的选择是修改审核字段(例如:@LastModifiedDate),然后让spring用更新的值覆盖它?

共有1个答案

昌栋
2023-03-14

不管怎样,当我想更新此列时,即使我知道我的实体不是脏的,我也会自己设置lastModifiedDate。

entity.setLastModifiedDate(Instant.now());

该值将被LastModifiedDate注释覆盖,但我至少会得到我想要的。

我的情况是:我有一个表来跟踪文件系统中的文件,需要处理一些功能规则,如果用户上载的文件与前一个文件同名,如果我不手动设置lastModifiedDate,我就无法说出实际的最后上载日期。

(我知道我应该使用新的md5文件来设置我的实体脏,但这会让我的经理太害怕)

 类似资料:
  • 问题内容: 我有Spring MVC + JPA应用程序。 我的应用程序中有几个实体在不断变化。我希望能够审核此更改。我发现有一个注释可以跟踪对某些字段或整个实体的更改。我想知道是否有任何方法可以配置此跟踪选项- 我希望能够跟踪更改的内容以及更改的人。还可以对SQL 1个表中的多个实体进行更改吗?还可以跟踪- 实体字段的变化吗? 谢谢 问题答案: 是的,您可以跟踪所做的更改,更新的用户和时间戳。

  • 在这种情况下,我希望检索数据,但在返回数据之前,我希望在不保存/持久化的情况下对其进行更改。 这是我的Rest控制器: 以下是服务实现: 最初我在服务上有注释。通过删除它而不在方法中使用它,我首先想到的是会话将使用存储库打开和关闭,如这里的答案所示。 这不起作用,我在评论中看到“会话将持续整个HTTP请求处理过程。”所以,在我添加的服务中 然后在我添加的方法中 在我做任何改变之前。然而,我所做的任

  • 当我尝试更新一个实体的一个字段时,我是新来的,我注意到在日志中Hibernate执行两个查询,在更新之前,它会对所有字段进行SELECT。可以吗?为什么Hibernate执行SELECT?我如何用一个UPDATE查询更新一个字段?此外,当我试图更新一个实体中的单个标题时,它有另一个嵌套实体,我最终得到了一堆SELECT。我认为这对性能不好,或者我错了? 在互联网上,我找到了使用 @Modifyin

  • 我想让我的实体中的@Embedded字段“foo”在JPA 2.0中不可更新 如果我有另一个实体而不是@Em的可嵌入,我可以使用@列注释的updatable=false属性,但@Em天呐没有这样的属性 我发现了一个示例,即@Col的(updatable=false)注解直接用在了嵌入式数据库的字段上。 ..但是,如果我将 FooEmbedable 也用于另一个我希望它可以更新的表,会发生什么? 我

  • 这个问题几乎说明了一切。使用JPARepository,我如何更新一个实体? JPARepository只有一个save方法,它并不告诉我它实际上是create还是update。例如,我向数据库用户插入一个简单的对象,它有三个字段:、和: 然后我只需调用,此时它实际上是对数据库的插入: 到目前为止还不错。现在我想更新这个用户,比如说改变他的年龄。为此,我可以使用查询,无论是QueryDSL还是Na

  • 我已经使用Spring Data JPA AuditingEntityListener和AuditorAware bean设置了JPA审计。我想要的是即使在具有预定义标识符的实体上也能够持久化审计师详细信息。问题是,当具有预定义id的JPA实体被持久化和刷新时,它的审计师详细信息无法持久化: 对象引用未保存的临时实例-在刷新之前保存临时实例:me。审计道。审计详情 有趣的是,当保存具有生成id的实