Java 如何使用规范中的CriteriaQuery对列表进行排序?

Java 如何使用规范中的CriteriaQuery对列表进行排序?,java,spring-boot,criteria-api,Java,Spring Boot,Criteria Api,我正试图整理我的JPA邮箱返回的列表。我使用的是规范类,而不是@Query注释,根据,我应该使用标准查询对象 我的规格目前如下: public class MessageSpecification { public static Specification<MessageEntity> hasDemandeId(Long demandeId) { return (root, query, criteriaBuilder) -> {

我正试图整理我的JPA邮箱返回的列表。我使用的是
规范
类,而不是
@Query
注释,根据,我应该使用
标准查询
对象

我的规格目前如下:

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);
        };
    }
}
但它不起作用,无论我使用
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();

我在Specification类中找不到解决方案,因此我决定使用Sort类对列表进行排序:

公共排序排序技术(){
返回新的排序(Sort.Direction.ASC,“idtechnology”);
}
JpaRepository的
findAll
接受排序对象作为参数和规范:

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

不幸的是,它不起作用:(我再次尝试使用
asc()
desc()
,结果是@Artiow
return query.where(criteriaBuilder.equal(root.join(MessageEntity_.demande).get(DemandeEntity_.idTechnique), demandeId))
            .orderBy(cb.asc(root.get(MessageEntity_.idTechnique)))
            .distinct(true)
            .getRestriction();