spring-data-jpa Spring JPA查询以获取不在表中的所提供ID的子列表

8fsztsew  于 2022-11-10  发布在  Spring
关注(0)|答案(4)|浏览(178)

有没有一种方法可以使用SpringJPARepository Query来获取ID的子列表,这些ID在给定的ID列表中没有出现在我们的表中?
大概是这样的:

@Query(value = "Some query returning a sublist of orderIds not in TABLE")
List<String> orderIdsNotInTable(@Param("orderIds") List<String> orderIds);

我找到了一个链接here,但我想不出如何将其作为JPA查询。

**编辑:**此处的目标是保存运行内存,因此,如果有数千个id和许多调用同时发生,我希望它能够得到处理,而不可能为所有id创建第二个副本。

uidvcgyl

uidvcgyl1#

根据你的问题,我的解决方案是:
1.检索数据库中存在的ID列表:

@Query("select t.id from Table t")
    List<String> findAllIds();

1.循环查看您拥有的ID列表,并查找数据库表中的ID列表是否不包含您的ID。

List<String> idsNotContained= orderIds.stream()
    .filter(!findAllIds()::contains)
    .collect(Collectors.toList());
tpgth1q7

tpgth1q72#

基于@ Pawan.java解决方案,我将查找id,然后应用过滤。

List<String> findByIdIn(List<String> ids);

返回的列表将包含存在的id,然后只需从原始列表中删除这些id。

original.stream().filter(i -> 
  !existingIds.contains(i)).collect(Collectors.toList());

如果传入了大量的id,那么您可能需要考虑将它们拆分为并行批处理。

frebpwbc

frebpwbc3#

如果您的列表不是太大,那么一个简单而有效的解决方案是从列表中检索表中 * 存在 * 的ID:

select t.id from Table t where t.id in (id1, id2, ...)

然后,在初始列表和返回列表之间进行简单的比较,就可以给予表中没有的ID。

vzgqcmou

vzgqcmou4#

@Query(value = "SELECT t.id FROM TABLE t WHERE t.id NOT IN :orderIds")
List<String> orderIdsNotInTable(@Param("orderIds") List<String> orderIds);

我不知道我是否理解正确,但你可以尝试上面的解决方案。

相关问题