一尘不染

如何保持Spring Data JPA或Hibernate中“ in”子句中提供的顺序

hibernate

我有一个非常简单的查询,该查询基于“ in”子句检索值。作为“ in”参数出现的列表已适当排序。

查询:

@Query(value = "select i from ItemEntity i where i.secondaryId in :ids")
List<ItemEntity> itemsIn(@Param("ids") List<UUID> ids, Pageable pageable);

我需要将结果排序的方式与之相同List<UUID> ids,是否可以在没有纯sql的情况下但仅在Spring Dataand / or
的帮助下才能实现此目的Hibernate


阅读 679

收藏
2020-06-20

共1个答案

一尘不染

您也可以通过JPA进行此操作,但必须按所需顺序创建用逗号分隔的ID列表。根据您的情况,您可以保持相同的顺序。

@Query(value = "select i from ItemEntity i where i.secondaryId in :ids 
       order by FIND_IN_SET(i.secondaryId, :idStr)")
List<ItemEntity> itemsIn(@Param("ids") List<UUID> ids, @Param("idStr") String idStr);

要创建逗号分隔的列表,您可以使用Java 8流:

ids.stream().map(Object::toString).collect(Collectors.joining(","));

例:

SELECT id FROM User WHERE id in (2,3,1) 
ORDER BY FIND_IN_SET(id,"2,3,1");

结果:

+----+
| id |
+----+
|  2 |
|  3 |
|  1 |
+----+
2020-06-20