I'm trying to use Criteria API in my new project:
public List findEmps(String name) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery c = cb.createQuery(Employee.class); Root emp = c.from(Employee.class); c.select(emp); c.distinct(emp); List criteria = new ArrayList(); if (name != null) { ParameterExpression p = cb.parameter(String.class, "name"); criteria.add(cb.equal(emp.get("name"), p)); } /* ... */ if (criteria.size() == 0) { throw new RuntimeException("no criteria"); } else if (criteria.size() == 1) { c.where(criteria.get(0)); } else { c.where(cb.and(criteria.toArray(new Predicate[0]))); } TypedQuery q = em.createQuery(c); if (name != null) { q.setParameter("name", name); } /* ... */ return q.getResultList(); }
Now when I change this line:
criteria.add(cb.equal(emp.get("name"), p));
to:
criteria.add(cb.like(emp.get("name"), p));
I get an error saying:
The method like(Expression, Expression) in the type CriteriaBuilder is not > applicable for the arguments (Path, ParameterExpression)
What's the problem?