如何在JPA中使用mysql的FIELD()函数

问题描述 投票:0回答:3

我的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()
方法中添加/调用该函数?上述方法报错。

mysql function jpa criteria
3个回答
0
投票

我们可以与本机查询标志一起使用。 例如.,

@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);

0
投票

对于这个简单的情况,我不会使用

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();

0
投票

不是这个问题的确切答案,但该问题的解决方案可能是 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"

© www.soinside.com 2019 - 2024. All rights reserved.