如何为以下查询创建 JPA 规范或条件查询的谓词



我正在尝试为两个日期 date1 和 date2 之间的过滤器数据创建 JPA 规范,我试图通过子查询创建,但到目前为止没有运气,如果可能的话,请提供帮助。 我正在尝试为以下SQL查询创建规范,

select
* from
subscription sub join (
select subscription_id,
max(output_date) as max_output_date
from
subscription_package
where
package_status = 'COMPLETE'
group by
subscription_id) sp on
sub.id = sp.subscription_id where
max_output_date between 'date1' and 'date2'

下面是在 JPA 中创建的查询:

Subquery<Date> datequery = query
.subquery(Date.class);
Root<SubscriptionPackage> dateRoot = datequery
.from(SubscriptionPackage.class);
Subquery<SubscriptionPackage> subquery = query
.subquery(SubscriptionPackage.class);
Root<SubscriptionPackage> subqueryRoot = subquery
.from(SubscriptionPackage.class);
datequery.select(criteriaBuilder
.greatest(subqueryRoot.<Date>get("outputDate")));
datequery.where(criteriaBuilder.equal(subqueryRoot.get("PackageStatus"),
'COMPLETE'));
datequery.groupBy(subqueryRoot.get("subscription"));

无法使用日期查询的结果进行比较,例如

query.where(criteriaBuilder.between(datequery., outFrom, outTo));

我不知道你为什么使用Subquery,你可以使用简单的Spring数据jpa和连接得到你想要的结果。 请查看这些示例

对于日期比较:

criteriaBuilder.between(root.get("createdDate"), fromDate, toDate));

最新更新