【发布时间】:2015-02-15 00:59:10
【问题描述】:
此查询用于检索一对多关系中的最后一条记录(请参阅 SQL join: selecting the last records in a one-to-many relationship)
SELECT p.*
FROM customer c
INNER JOIN (
SELECT customer_id, MAX(date) MaxDate
FROM purchase
GROUP BY customer_id
) MaxDates ON c.id = MaxDates.customer_id
INNER JOIN purchase p ON MaxDates.customer_id = p.customer_id
AND MaxDates.MaxDate = p.date;
我的问题: 如何使用带有 jpa 标准 api 的子选择构建此连接?可能吗?如果没有,可以用 jpql 吗?
到目前为止我的代码:
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<Purchase> query = cb.createQuery(Purchase.class);
final Root<CustomerEntity> root = query.from(Customer.class);
// here should come the join with the sub-select
final Path<Purchase> path = root.join(Customer_.purchases);
query.select(path);
final TypedQuery<Purchase> typedQuery = entityManager.createQuery(query);
return typedQuery.getResultList();
【问题讨论】:
-
解决这个问题以供参考和练习会很有趣,尽管您可能在 3 年后不再需要它。请给出表的表结构好吗?
标签: jpa-2.0 criteria-api