【发布时间】:2016-11-04 15:11:02
【问题描述】:
我是 Jpa 的新手。我有一个 List 列表,其中包含大约 10000-50000 个客户端对象。
我正在遍历此列表并查询每个客户是否进行过这样的购买:
List<TransactRepViewModel> temporalList = transactRepViewRepository
.findByClientIdAndClDateBetween(clieTabModel.getClientId(),
reportInterval.getStartDate(),
reportInterval.getEndDate());
TransactRepViewRepository.class 方法如下所示:
List<TransactRepViewModel> findByClientIdAndClDateBetween(
String clientId, Date startDate, Date endDate) throws DataAccessException;
我真的很想改进我的搜索时间,因为遍历如此多的客户需要相当长的时间。有什么我可以使用的技术吗?
【问题讨论】:
-
写一个“findAll”查询?
-
你能详细说明一下吗?
-
在您的 JPA 存储库中编写一个新方法。此方法可能类似于:findAllByStartDateEndDate。此链接可能会有所帮助:docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/…
-
这不会缩短搜索时间。
-
如此庞大的客户名单从何而来?如果它来自另一个查询,那么您应该使用带有连接的单个查询。如果它来自其他地方,请考虑使用
in子句一次传递多个客户端 ID。但请注意,大多数数据库都会限制 in 子句中的值数量和/或查询的长度。例如,Oracle 的限制为 1000。不过,这会将查询数量从 50000 减少到 50。
标签: java spring hibernate spring-boot spring-data-jpa