简体   繁体   中英

Reactive Mongo - DeleteAllBy… query - Couldn't find PersistentEntity for type class java.lang.Void

Hi I have a spring boot webflux app and use mongo db as a backend. I want to remove all documents that match a certain query so I created a method

fun deleteAllByInsertTimestampIsBefore(to: LocalDateTime): Mono<Void>

However when I want to execute the method I get an exception

reactor.core.Exceptions$ErrorCallbackNotImplemented: org.springframework.data.mapping.MappingException: Couldn't find PersistentEntity for type class java.lang.Void!
Caused by: org.springframework.data.mapping.MappingException: Couldn't find PersistentEntity for type class java.lang.Void!
    at org.springframework.data.mapping.context.MappingContext.getRequiredPersistentEntity(MappingContext.java:79)
    at org.springframework.data.mongodb.repository.query.DtoInstantiatingConverter.<init>(DtoInstantiatingConverter.java:62)
    at org.springframework.data.mongodb.repository.query.ReactiveMongoQueryExecution$ResultProcessingConverter.convert(ReactiveMongoQueryExecution.java:176)
    at org.springframework.data.mongodb.repository.query.ReactiveMongoQueryExecution$ResultProcessingExecution.execute(ReactiveMongoQueryExecution.java:146)
    at org.springframework.data.mongodb.repository.query.AbstractReactiveMongoQuery.execute(AbstractReactiveMongoQuery.java:125)
    at org.springframework.data.mongodb.repository.query.AbstractReactiveMongoQuery.execute(AbstractReactiveMongoQuery.java:91)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:605)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.data.repository.core.support.MethodInvocationValidator.invoke(MethodInvocationValidator.java:99)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy91.deleteAllByInsertTimestampIsBefore(Unknown Source)
    at com.x.sniper.app.registration.RegistrationRequestService.removeOldRegistrationRequest(RegistrationRequestService.kt:56)
    at com.x.sniper.app.registration.SpringRegistrationService.removeOldRegistrationRequest(SpringRegistrationService.kt:76)
    at com.x.sniper.app.database.ScheduledDatabaseCleanup$setup$1.invoke(ScheduledDatabaseCleanup.kt:32)
    at com.x.sniper.app.database.ScheduledDatabaseCleanup$setup$1.invoke(ScheduledDatabaseCleanup.kt:17)
    at com.x.sniper.app.database.ScheduledDatabaseCleanup$scheduledDatabaseCleanup$3.apply(ScheduledDatabaseCleanup.kt:47)
    at com.x.sniper.app.database.ScheduledDatabaseCleanup$scheduledDatabaseCleanup$3.apply(ScheduledDatabaseCleanup.kt:17)
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:350)
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:664)
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:540)
    at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:924)
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
    at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
    at reactor.core.publisher.Flux.subscribe(Flux.java:7921)
    at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389)
    at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:192)
    at reactor.core.publisher.FluxInterval$IntervalRunnable.run(FluxInterval.java:123)
    at reactor.core.scheduler.PeriodicWorkerTask.call(PeriodicWorkerTask.java:59)
    at reactor.core.scheduler.PeriodicWorkerTask.run(PeriodicWorkerTask.java:73)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Does it mean that spring data DeleteBy.. methods return something different than Mono

Reactive SpringData deleteBy queries can emit either the number of Documents deleted, or the deleted entities themselves, like in the snippet below.

fun deleteAllByLastname(lastname: String): Mono<Long>
fun deleteAllByLastname(lastname: String): Flux<Person> 

In case you're just interested in the completion signal please use then() to turn the result in to Mono<Void> .

I created DATAMONGO-2406 to improve the behavior of deleteBy .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM