我创建了一个 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
}
}
如果我像这样实现我的代码,我需要在保存之前为每个文档调用 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/