JPA CriteriaBuilder - 不在集合中

Dim*_*ele 6 collections jpa where-clause

有什么区别:

在 Builder 上首次测试运行:

Predicate predicate = root.get(PersonEntity_.name).in(names);
criteriaBuilder.not(predicate);
Run Code Online (Sandbox Code Playgroud)

对查询运行第二次测试:

Predicate predicate2 = root.get(PersonEntity_.name).in(names).not();
criteriaQuery.where(predicate2);
Run Code Online (Sandbox Code Playgroud)

这似乎给出了相同的结果。我错过了什么吗?我们应该选择 CriteriaBuilder 之上的 CriteriaQuery 吗?

完整示例:

List<String> names = new ArrayList<String>();
names.add("John");
names.add("Emma");

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<PersonEntity> criteriaQuery = criteriaBuilder.createQuery(PersonEntity.class);
Root<PersonEntity> root = criteriaQuery.from(PersonEntity.class);

// First test run on the Builder
Predicate predicate = root.get(PersonEntity_.name).in(names);
criteriaBuilder.not(predicate);

// Second test run the query
//    Predicate predicate2 = root.get(PersonEntity_.name).in(names).not();
//    criteriaQuery.where(predicate2);

List<PersonEntity> list = entityManager.createQuery(cq).getResultList();
Run Code Online (Sandbox Code Playgroud)

unw*_*ich 1

这些变体之间没有区别。两种陈述的结果相同。