如何在JPA2中执行Criteria Query,这与使用和不使用元模型的JPQL等效?
SELECT p FROM Employee e JOIN e.phones p WHERE e=:empl
答案 0 :(得分:1)
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Phone> criteriaQuery = cb.createQuery(Phone.class);
Root<Employee> employee = criteriaQuery.from(Employee.class);
CollectionJoin<Employee, Phone> phone = employee.join(Employee_.phones);
criteriaQuery.where(cb.equal(employee, empl);
criteriaQuery.select(phone);
TypedQuery<Phone> query = em.createQuery(criteriaQuery);
List<Phone> phones = query.getResultList();
那就是说,我认为用上面可怕的,不可读的代码行替换一个简单明了的JPQL查询是没有意义的。 Criteria查询对于动态构造查询很有用,但JPQL会为你所拥有的静态查询提供支持。