JPA CriteriaBuilder - 不在集合中

标签 jpa collections where

有什么区别:

在 Builder 上的第一次测试运行:

Predicate predicate = root.get(PersonEntity_.name).in(names);
criteriaBuilder.not(predicate);

对查询的第二次测试运行:
Predicate predicate2 = root.get(PersonEntity_.name).in(names).not();
criteriaQuery.where(predicate2);

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

完整示例:
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

//谓词 predicate2 = root.get(PersonEntity_.name).in(names).not();
//criteriaQuery.where(predicate2);
List<PersonEntity> list = entityManager.createQuery(cq).getResultList();

最佳答案

这些变体之间没有区别。这两个语句的结果相同。

关于JPA CriteriaBuilder - 不在集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21383435/

相关文章:

mysql修复使用哪里;

inheritance - JPA TABLE_PER_CLASS继承: How to only SELECT superclass entries?

java - 遍历列表并汇总类型相同的所有金额

Java 在 O(1) 中合并 2 个集合

arrays - 如何使用PowerShell Where-Object过滤属性长度?

c# - 带有 where 子句的 Foreach?

java - JPA/Hibernate : @ManyToOne and @OneToOne relationships tagged as FetchType. LAZY 和 optional = false 不在 em.find() 上延迟加载?

java - 不同应用程序上的 jpa 实体

java - Hibernate + JPA无法为子类映射不同的id

java - LinkedHashMap 与 HashMap != LinkedList 与 ArrayList