我创建了一个 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 中,我们可以像 EventListeners 一样使用 @PrePersist 。是否有 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/

10-12 03:20