【问题标题】:@LastModifiedBy and @LastModifiedDate not working for embedded object@LastModifiedBy 和 @LastModifiedDate 不适用于嵌入对象
【发布时间】:2020-01-27 11:53:21
【问题描述】:

我正在尝试使用 @LastModifiedDate@LastModifiedBy 注释来审核我在 MongoDB 中的记录。

这是我的模型

    @Document(collection = "A")
    class A{
    @LastModifiedBy
    private String lastModifiedUser;
    @LastModifiedDate
    private Instant lastModifiedDate;
    private List<B> listB;
    }

    class B{
    @LastModifiedBy
    private String lastModifiedUser;
    @LastModifiedDate
    private Instant lastModifiedDate;
    }

Service1.class
public class Service1 {
 public void saveA(A a) {
      repository.save(a)
      }
 }

class A 可以正常工作,但不能用于嵌入式 class B

任何帮助将不胜感激。

使用2.1.10- Spring Data Mongo and for Springboot 2.1.8.Release

【问题讨论】:

  • 我是2.1.10- Spring Data Mongo and for Springboot 2.1.8.Release
  • AB交互有什么区别?你能提供最少的可重现代码吗?
  • 在向 Mongo DB 添加条目时,我能够为 A 获得 lastModifiedUserlastModifiedDate 的值,但在 B 的列表中我没有获得这两个值。
  • 这似乎是一个已知问题jira.spring.io/browse/DATAMONGO-1440,也许这篇文章会帮助stackoverflow.com/questions/37324188/…
  • @shahaf,我已经浏览了那个帖子,无法得到任何解决方案。

标签: java mongodb spring-boot


【解决方案1】:

您的帖子中没有太多内容可以了解您所追求的最终解决方案的行为......所以我会尽力而为:)

在写这篇文章的那天,spring 有一个已知的嵌入文档审计问题,如 here 所述,因此您必须使用自己的逻辑覆盖 audit 接口以设置和更改 @ 987654323@ 和 lastModifiedDate 字段,这是可能的,但不是那么容易,并且可能会在您的项目中为 spring-data 的功能引入不希望的行为

您可以通过自定义方法强制对B 进行所有更改,因此对List&lt;B&gt; 的每次修改都会触发“更改检查”(这不涉及任何spring-data 功能)

另一种方法是(我的建议)

使用B作为单独的文档,并使用@DBRef将b的引用列表存储在A

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2016-04-08
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多