我的sql查询是这样的
Select * from tableA order by FIELD('ID', 3, 5, 2)
如何使用
JPA
在
criteria builder
中实现此功能?
编辑
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;
}
上面是我的函数,它给出了订单列表,我只想添加一个与上面的 sql 查询相同的订单。如何在
orders.add()
方法中添加/调用该函数?上述方法报错。
我们可以与本机查询标志一起使用。 例如.,
@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);
对于这个简单的情况,我不会使用
FIELD
函数,而是按排序列表对结果进行排序,如here所述。
例如:
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();
不是这个问题的确切答案,但该问题的解决方案可能是 sql 函数
FIND_IN_SET()
。
@Query(value="select * from tableName where id IN :id ORDER BY FIND_IN_SET(tableName.id,:orderedIdString)")
List<Entity Name> getByIds(@Param("id") List<Integer> id, String orderedIdString);
请注意,第二个参数必须是字符串,例如
"1,2,3,4,5"