关联查询
、子查询
和内建函数
是在JPQL中常用的高级查询功能,用于处理复杂的查询需求。
1. 关联查询
关联查询用于查询关联实体之间的数据,例如一对多或多对多关系。
代码如下:
String jpql = "SELECT c FROM Customer c JOIN c.orders o WHERE o.totalAmount > 1000";
EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery(jpql);
List<Customer> customers = query.getResultList();
通过 JOIN c.orders o 关联查询客户和订单实体,然后筛选出订单总金额大于1000的客户。
2. 子查询
子查询是在查询语句中嵌套另一个查询,用于在一个查询中使用另一个查询的结果。
String jpql = "SELECT p FROM Product p WHERE p.price > (SELECT AVG(p.price) FROM Product p)";
EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery(jpql);
List<Product> products = query.getResultList();
通过子查询 SELECT AVG(p.price) FROM Product p 来查询产品价格的平均值,并在主查询中筛选出价格高于平均值的产品。
3. 内建函数
JPQL提供了一些内建函数,用于在查询中执行常见的操作,如字符串处理、日期处理等。
String jpql = "SELECT p FROM Product p WHERE UPPER(p.name) LIKE '%PHONE%'";
EntityManager entityManager = entityManagerFactory.createEntityManager();
Query query = entityManager.createQuery(jpql);
List<Product> products = query.getResultList();
使用 UPPER(p.name) 内建函数将产品名称转换为大写,并通过 LIKE ‘%PHONE%’ 筛选出名称中包含"PHONE"的产品。