Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPQL过滤不满足查询的集合?_Java_Jpa_Jpql - Fatal编程技术网

Java 如何使用JPQL过滤不满足查询的集合?

Java 如何使用JPQL过滤不满足查询的集合?,java,jpa,jpql,Java,Jpa,Jpql,我有一个收藏idsToCheck我想做一些类似的事情 select a.entry from idsToCheck as a where a.entry not in (select d.id from data d) 我现在所做的是 @Query("select count(a) > 0 from Data a where a.id = :id") boolean isIdExists(String id); idsToCheck .stream()

我有一个收藏
idsToCheck
我想做一些类似的事情

select a.entry from idsToCheck as a where a.entry not in (select d.id from data d)
我现在所做的是

@Query("select count(a) > 0 from Data a where a.id = :id")
boolean isIdExists(String id);


idsToCheck 
  .stream()
  .filter(check-> !artifacts.isIdExists(check))
  .forEach(responseBuilder::addDeletedIds);


仅使用JPQL可能是可行的,但由于JPQL不支持集合操作,并且选择是针对实体执行的(因此不是针对作为参数给定的标量或数组),因此实现这项任务可能很复杂

我意识到我的建议并不是纯粹的JPQL,但它可以替代您的建议,让查询更加抽象。在我的建议中,我假设Spring存储库接口,但我猜它也适用于其他地方,只需稍作修改

// First fetch all entities in given collection of ids
@Query("SELECT d.id FROM Data d WHERE id in :idsToCheck")
Set<String> findByIds(@Param("idsToCheck") Collection<String> idsToCheck);

// find out which ids were not found at all (the needed SET operation)
default Set<String> findNonExistentIds(Set<String> idsToCheck) {
    idsToCheck.removeAll(findByIds(idsToCheck));
    return idsToCheck;
}
//首先获取给定ID集合中的所有实体
@查询(“从数据d中选择d.id,其中id位于:idsToCheck”)
设置findByIds(@Param(“idsToCheck”)集合idsToCheck);
//找出根本找不到的ID(所需的设置操作)
默认设置findnonexistintids(设置idsToCheck){
removeAll(findByIds(idsToCheck));
返回idsToCheck;
}
使用本机查询时,如果没有助手方法,这应该是可能的