[英]Order by a list in JPA criteria query
我的用例是根據列表中值的順序對表中的響應進行排序。 按預期工作的 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 , city_uuid , micromarket_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")));
請看看這是否有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.