spring - 如何使用 Spring Data Repositories 处理大量数据?

标签 spring repository spring-data

我有一个大表,我想通过 Spring Data Repository 访问它。

目前,我正在尝试扩展 PagingAndSortingRepository 接口(interface),但似乎我只能定义返回列表的方法,例如:

public interface MyRepository extends 
        PagingAndSortingRepository<MyEntity, Integer>
{
  @Query(value="SELECT * ...")
  List<MyEntity> myQuery(Pageable p);
}

另一方面,PagingAndSortingRepository 附带的 findAll() 方法返回一个 Iterable (我认为数据不是加载到内存中)。

是否可以定义同时返回 Iterable 和/或不一次将所有数据加载到内存中的自定义查询?

有没有其他方法可以处理大表?

最佳答案

这里有经典的咨询答案:视情况而定。由于该方法的实现是特定于存储的,因此我们依赖于底层存储 API。在 JPA 的情况下,没有机会提供流式访问,因为 ....getResultList() 返回一个 List。因此,我们还将 List 暴露给客户端,因为 JPA 开发人员可能习惯于使用列表。所以对于 JPA,唯一的选择是使用分页 API。

对于像 Neo4j 这样的商店,我们支持流式访问,因为存储库在 CRUD 方法以及 finder 方法的执行上返回 Iterable

关于spring - 如何使用 Spring Data Repositories 处理大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231830/

相关文章:

java - Spring Boot Hibernate 一对多无限递归

Spring Data CrudRepository 的保存抛出 InvocationTargetException

hibernate - Spring Data + Hibernate 查询缓存不起作用

java - 如何运行gulp任务和spring-boot :run together with maven?

java - 如何在 spring boot 中连接到 MongoDB?

Mercurial 存储库窄克隆?

rest - 获取重骨料列表

javascript - Ajax POST 到 Spring RestController 时出现 400 bad request 错误

java - 在 Docker 中连接 Spring Boot 和 MongoDB

java - 在数据库中存储语言的最佳实践