跳到主要内容

仓库查询返回类型

DeepSeek V3 中英对照 Repository query return types

支持的查询返回类型

下表列出了 Spring Data 仓库通常支持的返回类型。然而,请查阅特定存储的文档以获取支持的返回类型的确切列表,因为此处列出的某些类型可能在特定存储中不受支持。

备注

地理空间类型(如 GeoResultGeoResultsGeoPage)仅适用于支持地理空间查询的数据存储。某些存储模块可能会定义自己的结果封装类型。

表 1. 查询返回类型

返回类型描述
void表示没有返回值。
原始类型Java 基本类型。
包装类型Java 包装类型。
T一个唯一的实体。期望查询方法最多返回一个结果。如果未找到结果,则返回 null。如果返回多个结果,将触发 IncorrectResultSizeDataAccessException 异常。
Iterator<T>一个 Iterator(迭代器)。
Collection<T>一个 Collection
List<T>一个 List(列表)。
Optional<T>一个 Java 8 或 Guava 的 Optional。期望查询方法最多返回一个结果。如果没有找到结果,则返回 Optional.empty()Optional.absent()。如果返回的结果多于一个,则会触发 IncorrectResultSizeDataAccessException
Option<T>可以是 Scala 或 Vavr 的 Option 类型。语义上与前面描述的 Java 8 的 Optional 行为相同。
Stream<T>一个 Java 8 Stream
Streamable<T>一个方便扩展的 Iterable,它直接暴露了用于流式处理、映射和过滤结果、连接它们等方法。
实现 Streamable 的类型,并接受 Streamable 构造函数或工厂方法参数暴露一个构造函数或 ….of(…)/….valueOf(…) 工厂方法,并以 Streamable 作为参数的类型。详细信息请参阅 返回自定义 Streamable 包装类型
Vavr 的 Seq, List, Map, SetVavr 集合类型。有关详细信息,请参阅 Vavr 集合支持
Future<T>一个 Future。期望方法被注解为 @Async,并且需要启用 Spring 的异步方法执行能力。
CompletableFuture<T>一个 Java 8 的 CompletableFuture。期望某个方法被 @Async 注解,并且需要启用 Spring 的异步方法执行功能。
Slice<T>一个带有是否还有更多数据指示的大小固定的数据块。需要一个 Pageable 方法参数。
Page<T>一个带有额外信息的 Slice,例如结果的总数。需要 Pageable 方法参数。
Window<T>从滚动查询中获取的结果的Window。提供ScrollPosition以发起下一个滚动查询。需要一个ScrollPosition方法参数。
GeoResult<T>一个带有附加信息的结果条目,例如与参考位置的距离。
GeoResults<T>一个包含附加信息的 GeoResult<T> 列表,例如到参考位置的平均距离。
GeoPage<T>一个包含 GeoResult<T>Page,例如到参考位置的平均距离。
Mono<T>一个使用响应式存储库的 Project Reactor Mono,它会发射零个或一个元素。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果返回的结果超过一个,则会触发 IncorrectResultSizeDataAccessException
Flux<T>一个 Project Reactor 的 Flux 使用响应式仓库来发出零个、一个或多个元素。返回 Flux 的查询也可以发出无限数量的元素。
Single<T>一个 RxJava 的 Single,使用反应式仓库发射单个元素。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果返回的结果超过一个,则会触发 IncorrectResultSizeDataAccessException
Maybe<T>一个 RxJava 的 Maybe 发射零个或一个元素,使用响应式仓库。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果返回多个结果,则会触发 IncorrectResultSizeDataAccessException
Flowable<T>一个 RxJava Flowable,使用响应式存储库来发射零个、一个或多个元素。返回 Flowable 的查询也可以发射无限数量的元素。