如何使用JPA查询排除集合

如何使用JPA查询排除集合,jpa,criteria-api,Jpa,Criteria Api,我正在用JPA创建一个数据库查询,需要从结果中排除一个列表。 我该怎么做 public List<PersonEntity> getPersonsWithoutNotWanted(List<Long> notWantedId ) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<PersonEntity> cq = cb.createQuery(PersonEntity.

我正在用JPA创建一个数据库查询,需要从结果中排除一个列表。 我该怎么做

public List<PersonEntity> getPersonsWithoutNotWanted(List<Long> notWantedId ) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<PersonEntity> cq = cb.createQuery(PersonEntity.class);

    Root<PersonEntity> root = cq.from(PersonEntity.class);

    // How to add a Predicate or something else to remove all notWantedId's

    TypedQuery<RequestableEntity> query = em.createQuery(cq);
    return query.getResultList();
}
public List getpersonswithoutnotwantedid(List notWantedId){
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(PersonEntity.class);
Root Root=cq.from(PersonEntity.class);
//如何添加谓词或其他内容以删除所有notWantedId
TypedQuery=em.createQuery(cq);
返回query.getResultList();
}

只需使用IN,以及

cb.in(predExprForId, notWantedIds).not()
其中,
predExprForId
是id字段的谓词,并将此谓词用作where子句。由于您没有提供任何类,因此无法提供除此之外的详细信息

但要确保你的收藏量不要太大。数据库实现对单个查询中允许的参数数量有限制,因此对
notwantedid
的大小有实际限制

有关相关讨论,请参阅本文


你试过“在”和“不在”吗?我无法用我的收藏找到它:List notWantedId