我在SpringBoot项目中使用了kotlin协程,并使用Spring Data 访问MongoDB。
例如,对于findAll()
,一切都很正常,但是当我使用分页时,Spring在启动时抛出异常
IllegalStateException: Method has to use a either
multi-item reactive wrapper return type or a wrapped Page/Slice type.
我的代码如下:
@Repository
interface CoroutinesActivityRepository : CoroutineCrudRepository<Activity, String> {
suspend fun findAllOrderByTitle(page: Pageable): Flow<Activity>
}
data class Activity(val id: String? = null, val title: String)
可以对CoroutineCrudRepository
应用分页吗?对我来说唯一有效的方法是使用ReactiveMongoTemplate
@Component
class CoroutinesActivityRepository(
private val mongoTemplate: ReactiveMongoTemplate
) {
suspend fun findAllOrderByTitle(page: Pageable): Flow<Activity> =
mongoTemplate.find(Query().with(page), Activity::class.java).asFlow()
}
1条答案
按热度按时间kognpnkq1#
我知道现在很晚了,但是为了以后的参考...
尝试相同的操作,但删除
suspend
:fun findAllOrderByTitle(page: Pageable): Flow<Activity>
如果这解决了错误,但是分页不能正常工作,你可以使用
@Query
。同样,不要使用suspend
。要使用
@Query
手动实现分页,可以使用LIMIT
和OFFSET
。例如:要从
page
和size
变量计算offset
:希望这能有所帮助!