![](/img/trans.png)
[英]Spring JPA using Specifications and CriteriaQuery on Joint Tables
[英]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);
};
}
}
如您所見,這里有兩個實體類MessageEntity
和DemandeEntity
,其中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.