5

I'm new to Querydsl, I'm working on Spring data and Querydsl to make a dynamic filter, I use the interface: QueryDslPredicateExecutor so I can filter data using different entity fields, now I want to add "order by" to my query based on a BooleanExpression.

This my code:

QPersonData _personInventory = QPersonData.personData;
BooleanBuilder query = new BooleanBuilder();

query.and(_personInventory.status.eq(status));

Then I called my respository interface using the query:

personInventoryRepository.findAll(query, pageable);

My question is how I can apply "order by" to my query object based on different fields on my entity?

Jason Law
  • 965
  • 1
  • 9
  • 21
e2rabi
  • 4,728
  • 9
  • 42
  • 69

3 Answers3

7

Thanks all finally this solution work for me :

 QPersonData _personInventory = QPersonData.personData;
 BooleanBuilder query = new BooleanBuilder(); 

 query.and(_personInventory .status.eq(status));
 personInventoryRepository.findAll(query,0, Integer.MAX_VALUE,new QSort(_personInventory.field1.asc(),_personInventory.field2.asc()));   
e2rabi
  • 4,728
  • 9
  • 42
  • 69
6

You can add sort to your page information:

 Sort sort = new Sort.Order(Sort.Direction.ASC,"filedname").nullsLast();
 PageRequest pageRequest = new PageRequest(pageNumber, pageSize, sort);
 personInventoryRepository.findAll(query,pageRequest); 
Rahim Dastar
  • 1,259
  • 1
  • 9
  • 15
5

Add a method in your repository interface

findByStatus(status)

Then use code block like below

Pageable pageable = new PageRequest(offset, limit, Direction.DESC, "updatedAt");
repository.findByStatus(status, pageable);

if your using spring boot 2.0.0 => then use method

PageRequest.of(....)