這基本上是這樣相反: How to do a paged QueryDSL query with Spring JPA?如何將彈簧數據排序轉換爲querydsl OrderSpecifier?
這是針對我不能使用任何的findAll的自定義查詢()方法。
編輯:
發佈錯誤的鏈接。現在糾正了。
這基本上是這樣相反: How to do a paged QueryDSL query with Spring JPA?如何將彈簧數據排序轉換爲querydsl OrderSpecifier?
這是針對我不能使用任何的findAll的自定義查詢()方法。
編輯:
發佈錯誤的鏈接。現在糾正了。
你可以這樣做出頭:「別名」,但一定要修剪o.getProperty(),所以你只能通過屬性而不是+物業
if (pageable != null) { query.offset(pageable.getOffset()); query.limit(pageable.getPageSize()); for (Sort.Order o : pageable.getSort()) { PathBuilder orderByExpression = new PathBuilder(Object.class, "object"); query.orderBy(new OrderSpecifier(o.isAscending() ? com.mysema.query.types.Order.ASC : com.mysema.query.types.Order.DESC, orderByExpression.get(o.getProperty()))); } }
我不知道這是否仍然相關,但在spring數據jpa中有一個實現將data.domain.Sort(Spring JPA)對象轉換爲OrderSpecifier(QueryDSL)的實現。
GIT Source of Querydsl Support in Spring JPA
它實在是太醜了實現,但你仍然可以重新使用它自己的目的,該方法是私有的:
public JPQLQuery applySorting(Sort sort, JPQLQuery query)
但是,如果你使用Spring數據JPA,在自定義庫的實現,你只需要做:
public Page<MyObject> findAll(Predicate predicate, Pageable pageable) {
QMyObject myObject = QMyObject.myObject;
JPQLQuery jPQLQuery = from(myObject)
.join(myObject.user)
.where(predicate);
jPQLQuery = getQuerydsl().applyPagination(pageable, jPQLQuery);
List<MyObject> myObjectList = jPQLQuery.list(myObject);
long count = jPQLQuery.count();
Page<MyObject> myObjectPage = new PageImpl<MyObject>(myObjectList, pageable, count);
return myObjectPage;
}
希望它可以幫助!
org.springframework.data.domain.Sort.Order
和com.querydsl.core.types.Order
並且如此相似,但兩者之間沒有直接的轉換。這是有所改善frozenfury答案的版本:
PathBuilder<Entity> entityPath = new PathBuilder<>(Entity.class, "entity");
for (Order order : pageable.getSort()) {
PathBuilder<Object> path = entityPath.get(order.getProperty());
query.orderBy(new OrderSpecifier(com.querydsl.core.types.Order.valueOf(order.getDirection().name()), path));
}
標記爲答案,因爲我的問題得到回答,我來到了相同的解決方案,除了使用MyClass.class代替Object.class。然而,我如何以通用的方式做到這一點,例如MyClass實際上是? –
您應該重新使用orderByExpression,因爲它是兒童訂購的常見父項。這個名字也是誤導性的,因爲孩子們是真正的「按表達式排序」。 –
這種作品適合我的情況,但不完全。問題是我需要對計算字段進行排序(總和,計數)。我把它們作爲別名,但問題是PathBuilder總是附加到查詢「別名」。 +屬性。在這個例子中,它總是返回無效的「ORDER BY object。{別名}」。我怎樣才能讓QueryDSL追加「ORDER BY {別名}」? – Cenobyte321