You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JPA Criteria API代码改造为响应式实现并返回Mono<List<QdCF>>

迁移JPA Criteria查询到Spring Data R2DBC响应式实现

首先要明确:JPA是阻塞式API,无法直接改造为响应式实现。你已经引入了spring-boot-starter-data-r2dbc,应该基于R2DBC来实现响应式查询,同时建议移除spring-boot-starter-data-jpa依赖(避免冲突,且JPA无法提供真正的响应式能力)。

下面提供两种可行的改造方案,都能返回Mono<List<QdCF>>类型结果:

方案一:使用Spring Data R2DBC派生查询(推荐,最简单)

对于findByDataBaixaNull这种简单的固定条件查询,Spring Data R2DBC支持通过方法名自动生成查询,无需手动写Criteria:

import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import reactor.core.publisher.Mono;
import java.util.List;

public interface QdCFReactiveRepository extends ReactiveCrudRepository<QdCF, Long> {
    // 方法名遵循Spring Data命名规则,自动生成"data_baixa IS NULL"的查询
    Mono<List<QdCF>> findByDataBaixaIsNull();
}

直接注入这个接口调用即可,Spring Data会自动完成响应式查询的实现。

方案二:手动构建动态查询(类似JPA Criteria的场景)

如果需要动态拼接查询条件(对应原来JPA Criteria的灵活场景),可以用Spring Data R2DBC提供的Criteria API结合DatabaseClient来实现:

import org.springframework.data.r2dbc.core.DatabaseClient;
import org.springframework.data.r2dbc.core.query.Criteria;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Mono;
import java.util.List;

@Repository
public class QdCFR2dbcCustomRepository {

    private final DatabaseClient databaseClient;

    // 构造注入DatabaseClient
    public QdCFR2dbcCustomRepository(DatabaseClient databaseClient) {
        this.databaseClient = databaseClient;
    }

    public Mono<List<QdCF>> findByDataBaixaNull() {
        return databaseClient.select()
                .from(QdCF.class)
                // 构建查询条件:dataBaixa为null
                .matching(Criteria.where("dataBaixa").isNull())
                .fetch()
                .all() // 以Flux<QdCF>返回所有结果
                .collectList(); // 转换为Mono<List<QdCF>>
    }
}

关键注意点

  • 不要同时混用JPA和R2DBC的Repository:JPA的Repository是阻塞的,会破坏WebFlux的响应式链路。
  • 确保实体类QdCF适配R2DBC:比如用@Table注解(Spring Data R2DBC的注解,而非JPA的@Entity),字段映射正确。

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:05:20