如何使用JPA查询排除集合

时间:2014-09-25 06:52:48

标签: jpa criteria-api

我正在使用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();
}

1 个答案:

答案 0 :(得分:1)

只需使用IN,就像

一样
cb.in(predExprForId, notWantedIds).not()

其中predExprForId是id字段的谓词,并使用此谓词作为where子句。除此之外没有任何细节,因为你没有提供课程

但请确保您的收藏品不是太大。您的数据库实现将限制单个查询中允许的参数数量,因此notWantedIds的大小存在实际限制。

有关相关讨论,请参阅此帖子

JPA How to get the number of parameter markers used in Criteria API?