spring-data-mongo 的 @PrePersist EventListener 替代方案

Ama*_*har 4 mongodb spring-data spring-data-jpa kotlin spring-data-mongodb

我创建了一个Repository自动递增 id 的方法@Document,但现在我需要显式调用@Idsetter 方法来设置新的 id。有没有一种方法可以使用 JPA 中的侦听器来做到这一点@PrePersist

@Repository
interface UserRepository : MongoRepository<User, Long>, UserRepositoryCustom

interface UserRepositoryCustom {
    fun save(user: User): User
}

class UserRepositoryImpl(private val mongoOperations: MongoOperations, private val sequenceRepository: SequenceRepository) : UserRepositoryCustom {

    override fun save(user: User): User {
        // need to call this line for every @Document
        user.id = sequenceRepository.getNextId(User.SEQUENCE_KEY)

        mongoOperations.insert(user)
        return user
    }
}
Run Code Online (Sandbox Code Playgroud)

GitHub 代码

如果我像这样实现我的代码,我需要sequenceRepository.getNextId(...)在保存之前调用每个文档。

在 JPA 中我们可以使用EventListeners@PrePersist. 是否有spring-data-mongo替代或类似的功能来实现这一目标?

Sun*_*han 5

在 Spring data mongo 中提供了事件监听器。例如,您可以扩展AbstractMongoEventListener类并重写以下方法来实现 PrePersist 等效项,

public void onBeforeSave(BeforeSaveEvent<E> event) {
    if (LOG.isDebugEnabled()) {
      LOG.debug("onBeforeSave({}, {})", event.getSource(), event.getDBObject());
    }
}
Run Code Online (Sandbox Code Playgroud)