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