如何使用JPA Criteria API执行此操作?

时间:2013-07-14 13:39:03

标签: java join jpa-2.0 criteria-api

如何在JPA2中执行Criteria Query,这与使用和不使用元模型的JPQL等效?

SELECT p FROM Employee e JOIN e.phones p WHERE e=:empl

1 个答案:

答案 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会为你所拥有的静态查询提供支持。