簡體   English   中英

按 JPA 條件查詢中的列表排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM