Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb @spring data mongo的PrePersist EventListener替代方案_Mongodb_Spring Data_Kotlin_Spring Data Jpa_Spring Data Mongodb - Fatal编程技术网

Mongodb @spring data mongo的PrePersist EventListener替代方案

Mongodb @spring data mongo的PrePersist EventListener替代方案,mongodb,spring-data,kotlin,spring-data-jpa,spring-data-mongodb,Mongodb,Spring Data,Kotlin,Spring Data Jpa,Spring Data Mongodb,我创建了一个存储库来自动增加@Document的id,但是现在我需要显式调用@idsetter方法来设置新id。 有没有一种方法可以像JPA@PrePersist @Repository interface UserRepository : MongoRepository<User, Long>, UserRepositoryCustom interface UserRepositoryCustom { fun save(user: User): User } class

我创建了一个
存储库来自动增加
@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
    }
}
@存储库
接口UserRepository:MongoRepository、UserRepositoryCustom
接口UserRepositoryCustom{
乐趣保存(用户:用户):用户
}
类UserRepositoryImpl(private val mongoOperations:mongoOperations,private val sequenceRepository:sequenceRepository):UserRepositoryCustom{
覆盖乐趣保存(用户:用户):用户{
//需要为每个@文档调用此行
user.id=sequenceRepository.getNextId(user.SEQUENCE\u键)
mongoOperations.insert(用户)
返回用户
}
}

如果我像这样实现代码,我需要在保存每个文档之前,为每个文档调用
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());
    }
}
public void onBeforeSave(beforesavevent事件){
if(LOG.isDebugEnabled()){
LOG.debug(“onBeforeSave({},{})”,event.getSource(),event.getDBObject();
}
}

您是否使用了自动增量?为了持久性,您需要使用onbeforecovert