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;
}
使用本机查询时,如果没有助手方法,这应该是可能的