2
春データPageable.getSortを()を実装します動的クエリ:JPA CriteriaQueryは、私は私の動的なクエリを構築し、春データページング可能オブジェクトに渡すためにJPA CriteriaQueryを使用
public Page<User> findByCriteria(String username, Pageable page) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> iRoot = cq.from(User.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (StringUtils.isNotEmpty(username)) {
predicates.add(cb.like(cb.lower(iRoot.<String>get("username")), "%" + username.toLowerCase() + "%"));
}
Predicate[] predArray = new Predicate[predicates.size()];
predicates.toArray(predArray);
cq.where(predArray);
TypedQuery<User> query = em.createQuery(cq);
int totalRows = query.getResultList().size();
query.setFirstResult(page.getPageNumber() * page.getPageSize());
query.setMaxResults(page.getPageSize());
Page<User> result = new PageImpl<User>(query.getResultList(), page, totalRows);
return result;
}
注:デモ用のパラメータは1つだけです。
しかし、返されるデータはソートされていないため、私は、CriteriaQueryでPageableを実装する方法は何でもあります。
私はこのように書くと思います何のソート情報 を見ていない、あなたの基準で
を動作するはずですしかし、どのようにそれを動的にする?それはあなたのコードでハードコードされていると私はPageableは自動的にソートを行うだろうと思いますか? – Javatar
Pageableは自動的にソートを行いません。それを行う際にはクエリでなければなりません。あなたがdinamicallyしたい場合は、Order(または同等のDTO)メソッドに渡す必要がありますfindByCriteria params –
ありがとう、私は手動でPageable、getSort()を使用してソートを行うことによって解決策を見つけました。 – Javatar