java - Spring Data MongoDB 审计不适用于嵌入式文档

标签 java spring mongodb spring-data-mongodb

我正在尝试通过使用 Spring Data MongoDB @LastModifiedDate 注释来引入审计。它适用于顶级文档,但我遇到了嵌入对象的问题。

例如:

@Document(collection = "parent")
class ParentDocument {

    @Id
    String id;        

    @LastModifiedDate
    DateTime updated;

    List<ChildDocument> children;  

}

@Document
class ChildDocument {

    @Id
    String id;        

    @LastModifiedDate
    DateTime updated;

}

默认情况下,当我使用内部 children 列表保存 parentDocument 实例时,仅为 parentDocument 设置 updated 值> 但不适用于 children 列表中的任何对象。但在这种情况下,我也想审核它们。有没有办法解决这个问题?

最佳答案

我决定使用自定义 ApplicationListener

来解决它
public class CustomAuditingEventListener implements 
        ApplicationListener<BeforeConvertEvent<Object>> {

    @Override
    public void onApplicationEvent(BeforeConvertEvent<Object> event) {
        Object source = event.getSource();
        if (source instanceof ParentDocument) {
            DateTime currentTime = DateTime.now();
            ParentDocument parent = (ParentDocument) source;
            parent.getChildren().forEach(item -> item.setUpdated(currentTime));
        }
    }
}

然后将对应的bean添加到应用上下文中

<bean id="customAuditingEventListener" class="app.CustomAuditingEventListener"/>

关于java - Spring Data MongoDB 审计不适用于嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37324188/

相关文章:

java - Android - com.google.android.youtube.player 包不存在

java - struts2 Web 应用程序中的 I18n 重定向问题

Spring Batch - "job"作用域 bean 无法注入(inject)到 "job"或 "step"作用域 bean

spring - 如果没有主键,则使用 spring data jpa 存储库

jquery - Spring mvc 3 在 url 中的 "#"之后附加内容?例如www.example.com/example#ui-tabs-4

MongoDB:匹配数组中的非空文档

java - 从字节数组中获取位值

java - 在 Git 中显示特定人员的日志信息

node.js - 如何将二进制数据从 post 存储到 MongoDB

使用 MongoDB "$in"运算符的 Javascript 查询生成器