我创建了一个 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/