簡體   English   中英

如何使用我的規格書中的CriteriaQuery訂購列表?

[英]How can I order a list using the CriteriaQuery in my Specifications?

我正在嘗試訂購JpaRepository返回的列表。 我使用的是Specification類而不是@Query注釋,根據這個問題 ,我應該使用CriteriaQuery對象。

我的規格目前如下:

public class MessageSpecification {

    public static Specification<MessageEntity> hasDemandeId(Long demandeId) {
        return (root, query, criteriaBuilder) -> {
            // TODO : order the list
            return criteriaBuilder.equal(root.join(MessageEntity_.demande).get(DemandeEntity_.idTechnique), demandeId);
        };
    }
}

如您所見,這里有兩個實體類MessageEntityDemandeEntity ,其中MessageEntity具有引用DemandeEntity的屬性。 因此,在本規范中,我將獲得具有指定的DemandeEntity的ID的MessageEntity列表。

現在,我想做一個相當於ORDER BY Message.ID 為此,我嘗試在謂詞(變量query )中使用CriteriaQuery對象:

return (root, query, criteriaBuilder) -> {
    query.orderBy(criteriaBuilder.asc(root.get(MessageEntity_.idTechnique)));
    return criteriaBuilder.equal(root.join(MessageEntity_.demande).get(DemandeEntity_.idTechnique), demandeId);
};

但這不起作用,無論我使用criteriaBuilder.desc()還是criteriaBuilder.asc() ,它都仍以相同的順序返回列表。

我猜我做錯了什么,我應該如何使用那個CriteriaQuery對象?

嘗試這個:

return query.where(criteriaBuilder.equal(root.join(MessageEntity_.demande).get(DemandeEntity_.idTechnique), demandeId))
            .orderBy(cb.asc(root.get(MessageEntity_.idTechnique)))
            .distinct(true)
            .getRestriction();

我發現規范類沒有解決方案,所以我決定使用Sort類對列表進行排序:

public Sort sortByIdTechnique(){
    return new Sort(Sort.Direction.ASC, "idTechnique");
}

JpaRepository的findAll接受Sort對象作為參數以及Specification:

List<MessageEntity> messages = repository.findAll(MessageSpecification.hasDemandeId(idDemande), sortByIdTechnique());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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