【发布时间】:2018-12-22 15:00:45
【问题描述】:
我想将 org.springframework.data.domain.Pageable 与 com.querydsl.jpa.impl.JPAQuery 一起使用。有没有办法或有可靠的解决方法如何使 Pageable 与 JPAQuery 一起使用?
【问题讨论】:
标签: java spring spring-boot spring-data-jpa querydsl
我想将 org.springframework.data.domain.Pageable 与 com.querydsl.jpa.impl.JPAQuery 一起使用。有没有办法或有可靠的解决方法如何使 Pageable 与 JPAQuery 一起使用?
【问题讨论】:
标签: java spring spring-boot spring-data-jpa querydsl
所以我 found 很好,为什么要让他们一起发布完整示例:
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Order;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.core.types.dsl.PathBuilder;
import com.querydsl.jpa.impl.JPAQuery;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import javax.persistence.EntityManager;
public class Example {
public void example(Pageable pageable, EntityManager em){
QCustomer qCustomer = QCustomer.customer;
JPAQuery<?> query = new JPAQuery<>(em);
query.from(qCustomer);
BooleanBuilder builder = new BooleanBuilder();
builder.and(qCustomer.email.likeIgnoreCase("c@m.c"));
JPAQuery<?> where = query.where(builder);
// This for loop is making it work with Pagable
query.offset(pageable.getOffset());
query.limit(pageable.getPageSize());
PathBuilder<Customer> entityPath = new PathBuilder<>(Customer.class, "customer");
for (Sort.Order order : pageable.getSort()) {
PathBuilder<Object> path = entityPath.get(order.getProperty());
query.orderBy(new OrderSpecifier(Order.valueOf(order.getDirection().name()), path));
}
List<Customer> resultList = query.createQuery().getResultList();
}
}
【讨论】: