微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按 JPA 条件查询中的列表排序

如何解决按 JPA 条件查询中的列表排序

我的用例是按照列表中值的顺序对表中的响应进行排序。按预期工作的 MysqL 查询是:

SELECT 
    property_uuid,micromarket_uuid,city_uuid,SUM(obligation_booked)
FROM
    projects_service_pluto.rent_calculated
WHERE
    property_uuid IN ('33','121')
GROUP BY zone_uuid,property_uuid
ORDER BY find_in_set(property_uuid,"33,121");

此处“33”和“121”是示例值。我需要在那里放置一个有序列表。我无法将其转换为 JPA Criteria 查询。到目前为止,我已经到了这个:

 Set<String> propertySet = new HashSet<>(propertyUuids);
 String paramAsstring = String.join(",",propertySet);
    
 Expression<?> orderColumn = builder.function("FIND_IN_SET",List.class,rentCalculatedRoot.get("propertyUuid"),builder.literal(paramAsstring));
 query.orderBy(orderColumn); //Here it gives an error saying expected value is Order

用这个代替:

query.orderBy(builder.asc(orderColumn));

解决了编译时错误,但显然给出了错误输出。这里的解决方案是什么?

TLDR; 在 JPA 条件查询中有没有办法根据值列表对输出进行排序?

解决方法

我们可以使用 orderBy 方法 CriteriaQuery 根据单列或多列数据对数据进行排序。

   CriteriaQuery<Test> criteriaQuery = criteriaBuilder.createQuery(Test.class);
   Root<Test> from = criteriaQuery.from(Test.class);
   CriteriaQuery<Test> select = criteriaQuery.select(Test);
   criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")));

请看看这是否有帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。