spring-boot-starter-data-mongodb似乎不包括使用@PrePersist @PreUpdate的persistence-api

问题描述

使用spring-boot-starter-data-mongodb时包含和使用JPA Entity Lifecycle Events的正确方法是什么?

我的pom.xml依赖项

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

我的类路径看不到以下任何JPA注释:

@PrePersist
@PostPersist
@PreRemove
@PostRemove
@PreUpdate
@PostUpdate
@PostLoad

解决方法

Mongo在#Entity Callbacks上记录了自己的事件。

示例:

class DefaultingEntityCallback implements BeforeSaveCallback<Person>,Ordered {      

    @Override
    public Object onBeforeSave(Person entity,String collection) {                   

        if(collection == "user") {
            return // ...
        }

        return // ...
    }

    @Override
    public int getOrder() {
        return 100;                                                                  
    }
}

可用的以下功能接口:

  • org.springframework.data.mongodb.core.mapping.event.AfterConvertCallback

  • org.springframework.data.mongodb.core.mapping.event.AfterSaveCallback

  • org.springframework.data.mongodb.core.mapping.event.BeforeConvertCallback

  • org.springframework.data.mongodb.core.mapping.event.BeforeSaveCallback

  • org.springframework.data.mongodb.core.mapping.event.ReactiveAfterConvertCallback

  • org.springframework.data.mongodb.core.mapping.event.ReactiveAfterSaveCallback

  • org.springframework.data.mongodb.core.mapping.event.ReactiveBeforeConvertCallback

  • org.springframework.data.mongodb.core.mapping.event.ReactiveBeforeSaveCallback