【发布时间】:2019-06-25 10:08:46
【问题描述】:
我正在尝试对 JpaRepository 返回的列表进行排序。我使用Specification 类而不是@Query 注释,根据this question,我应该使用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 的操作。为此,我尝试在我的谓词中使用CriteriaQuery 对象(变量query):
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 对象?
【问题讨论】:
标签: java spring-boot criteria-api