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

Ali*_*nik 6 java hibernate jpql spring-data spring-data-jpa

我有一个非常简单的查询,它根据"in"子句检索值.作为"in"参数出现的列表被适当地排序.

查询:

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

我需要以相同的方式订购结果List<UUID> ids,是否可以在没有普通sql的情况下实现这一点,但只能在Spring Data和/或的帮助下实现Hibernate.

Abh*_*ngh 8

您也可以通过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);
Run Code Online (Sandbox Code Playgroud)

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

ids.stream().map(Object::toString).collect(Collectors.joining(","));
Run Code Online (Sandbox Code Playgroud)

例:

SELECT id FROM User WHERE id in (2,3,1) 
ORDER BY FIND_IN_SET(id,"2,3,1");
Run Code Online (Sandbox Code Playgroud)

结果:

+----+
| id |
+----+
|  2 |
|  3 |
|  1 |
+----+
Run Code Online (Sandbox Code Playgroud)