java—如何保持SpringDataJPA或hibernate中“in”子句中提供的顺序

v440hwme  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(393)

这个问题在这里已经有答案了

spring数据存储库:按***中的***和结果顺序查找(2个答案)
三年前关门了。
我有一个非常简单的查询,它根据“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 Data 和/或 Hibernate .

a9wyjsp7

a9wyjsp71#

您也可以通过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 |
+----+

相关问题