@PrePersist EventListener替代spring-data-mongo

时间:2017-10-31 16:20:29

标签: 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中,我们可以EventListeners使用@PrePersist。是否有spring-data-mongo替代或类似的功能来实现这一目标?

1 个答案:

答案 0 :(得分:3)

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

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