我正在尝试使用 Criteria API 而不是将查询构造为 JPQL 字符串,因为 Criteria API 似乎更适合于此。但是,我在理解如何构造以下两个语句时遇到了一些问题。
SELECT e
FROM Subject e
WHERE e.company = :c1
OR e.company = :c2
OR e.company = :c3
在这种情况下,我需要遍历未知数量的值(c1、c2、c3 等)以匹配相同的属性。
SELECT e
FROM Subject e
WHERE e.company
LIKE :c1
OR e.account
LIKE :c1
OR e.email
LIKE :c1
在这种情况下,我需要传入一个值 (c1) 并对特定范围的属性进行“LIKE”比较。
我当前的模式看起来像这样:
// Criteria
CriteriaBuilder builder = subjectDAO.criteriaBuilder();
CriteriaQuery<Subject> query = builder.createQuery(Subject.class);
// Root
Root<Subject> subject = query.from(Subject.class);
List<Predicate> predicates = new ArrayList();
for (String property : map.keySet()) {
String value = (String) coreFilter.get(map);
predicates.add(????? This is where I come unstuck ?????);
}
// pass all the predicates into the query
query.where(predicates.toArray(new Predicate[predicates.size()]));
注意。我在构造 Query 对象或指定 Root 或 Joins 时没有任何问题。我只是对上述查询的特殊性有疑问。为了清楚起见,只需假设所有属性都是 String 并且不需要任何连接。