5

My sql query is something like

Select * from tableA order by FIELD('ID', 3, 5, 2)

How do I implement this in JPA using criteria builder?

EDIT

List<Integer> ordList = new ArrayList<Integer>();
ordList.add(3);
ordList.add(5);
ordList.add(2);
public List<Order> getOrderBys(CriteriaBuilder cb, Root<?> root) { 
     List<Order> orders = new ArrayList<Order>();         
           orders.add(cb.function("FIELD", Integer.class, root.get("id"), ordList));
     return orders; 
}

Above is my function which gives list of oders, I want to add only one order same as above sql query. How can I add/call that function in orders.add() method? The above method gives error.

Akshay
  • 3,558
  • 4
  • 43
  • 77

2 Answers2

0

We can use with the native query flag. For example.,

@Query(value="select * from table_name where id IN :id ORDER BY FIELD(id,:id)",nativeQuery = true)
List<Entity Name> getByIds(@Param("id") List<Integer> id);
Naveen Yalla
  • 141
  • 1
  • 11
0

For that simple case I would not use the FIELD function but would sort the result by the sorted list, as described here. E.g.:

List<Integer> ordList = new ArrayList<Integer>();
ordList.add(3);
ordList.add(5);
ordList.add(2);
List<Entity> resultList = query.getResultStream()
    .sort(Comparator.comparing(entity -> ordList.indexOf(entity.getId())))
    .collect(Collectors.toList();
ltlBeBoy
  • 1,242
  • 16
  • 23