我创建了一个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中,我们可以EventListeners
使用@PrePersist
。是否有spring-data-mongo
替代或类似的功能来实现这一目标?
答案 0 :(得分:3)
在Spring数据中,mongo提供了事件监听器。例如,您可以扩展AbstractMongoEventListener
类并覆盖以下方法以实现PrePersist等效项,
public void onBeforeSave(BeforeSaveEvent<E> event) {
if (LOG.isDebugEnabled()) {
LOG.debug("onBeforeSave({}, {})", event.getSource(), event.getDBObject());
}
}