我有一个非常简单的查询,该查询基于“ 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?
List<UUID> ids
Spring Data
Hibernate
您也可以通过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 | +----+