java - Spring 数据 Mongo 审计字段反射(reflect)在嵌套文档中

标签 java spring-data spring-data-mongodb audit spring-repositories

当保存带有嵌套审计文档的审计(@CreatedDate、@LastModifiedDate)文档时,这两个日期也将反射(reflect)在嵌套文档中。
这是场景:
文档A.java

public class DocumentA {
   @Id
   private String id;
   @Version
   private Long version;
   @CreatedDate
   private Long createdDate;
   @LastModifiedDate
   private Long lastModifiedDate;

   // getters and setters
}
文档B.java
public class DocumentB {
   @Id
   private String id;
   @Version
   private Long version;
   @CreatedDate
   private Long createdDate;
   @LastModifiedDate
   private Long lastModifiedDate;
   
   private DocumentA docA;

   // getters and setters
}
DocumentA 已存储在 db 中,并设置了其 createdDate 和 lastModifiedDate。然后,当保存带有嵌套 DocumentA 的新 DocumentB 时,嵌套 DocumentA 的 2 个日期将被修改为刚刚为 DocumentB 设置的相同值。这仅发生在嵌套文档中,而不会触及存储的 DocumentA(幸运的是!)。 预期的行为是嵌套文档将保持与通过代码设置的完全相同(这意味着与原始文档 A 相同)

最佳答案

这就像设计一样工作。
嵌入文档 A 与引用文档 A 不同。嵌入文档作为主文档的一部分进行管理意味着所有更改都被跟踪,因为它们是文档 B 中的顶级字段。引用文档是单独跟踪和管理的。
如果您只是引用,则应该使用手动引用和使用单独调用加载或使用 $lookup 聚合查询。其他替代方法是使用 dbref 让驱动程序在加载主文档时加载引用的文档。

关于java - Spring 数据 Mongo 审计字段反射(reflect)在嵌套文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64459597/

相关文章:

JavaFX动画问题

java.lang.String 无法转换为 main.java.example.Person

java - Spring Mongodb - 无法为 java.time.Period 编写自定义转换器

spring-boot - 需要为ElasticsearchRepository findBy查询编写自定义分析器

java - Spring数据异常查询

spring-data - SpringData MongoDB 使用投影

java - Spring Data Repositiories - 为每个查询添加特定参数

java - 循环从数据库表中获取无限ArrayList/List

java - SQLite: "DATABASE"附近:语法错误

java - Hibernate 违反 UNIQUE KEY 约束