mongodb - @PrePersist EventListener spring-data-mongo 的替代品

标签 mongodb spring-data kotlin spring-data-jpa spring-data-mongodb

我创建了一个 Repository 来自动增加 @Document 的 id 但现在我需要显式调用 @Id setter 方法来设置新的 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
    }
}

GitHub Code

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

在 JPA 中,我们可以像 @PrePersist 那样使用 EventListeners。是否有 spring-data-mongo 替代或类似功能来实现此目的?

最佳答案

在 Spring 中,data mongo 提供了事件监听器。例如,您可以扩展 AbstractMongoEventListener 类并覆盖下面的方法来实现 PrePersist 等价物,

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

关于mongodb - @PrePersist EventListener spring-data-mongo 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47040029/

相关文章:

kotlin - Kotlin如何使用stdlib.jar?

java - 解析xml kotlin android

java - 如何使用 OAuth 对 MicroProfile REST 客户端调用进行身份验证?

javascript - Mongoose 模型模式引用不起作用 - 电子商务模型

node.js - Mongoose的静态方法抛出: TypeError: Model.调用没有方法 'save'

mongodb - Liberty + Spring Data 中的容器管理的 MongoDB 连接

java - Spring 数据 jpa,jparepository 返回字符串列表代替 DTO 对象

java - Spring Data Neo4j SDN 4 审计支持

ruby-on-rails - 使用 Mongoid 的货币数据类型

java - 使用 Java 驱动程序 3.8 从 MongoDb 中提取 ISODate 作为日期字符串