Spring 数据存储库:findBySomething***In*** 和结果顺序
Spring data repository: findBySomething***In*** and result order
有没有什么方法可以使这些函数获得的结果按照提供给函数的列表(或集合)的顺序进行排序?
spring 数据存储库接口函数的简单示例:
public void List<Entity> findByColorIn(List<String> colors)
现在我正在创建顺序为 "green"、"blue"、"cyan" 的字符串列表并调用此函数。
假设所有这三种颜色都有唯一匹配:
如何让函数按给定列表中 属性 的给定顺序返回结果?在这个例子中:
Entity[id=32, color="green"]
Entity[id=11, color="blue"]
Entity[id=22, color="cyan"]
不确定这种情况下的默认顺序是什么,但我假设 id...
spring 数据有两个变体 api 如何使用基于 属性 的标准顺序。
1 个变体:
public void List<Entity> findByColorInOrderByColorDesc(List<String> colors)
public void List<Entity> findByColorInOrderByColorAsc(List<String> colors)
2 个变体
Sort sort= new Sort(Sort.Direction.ASC/DESC,"color");
public void List<Entity> findByColorIn(List<String> colors , Sort sort)
如果您想对案例使用自定义顺序,排序顺序:
颜色="green" , 颜色="blue", 颜色="cyan"
您需要根据您的排序逻辑使用带有自定义排序实现的变体 2。
如果您的结果集较小,您也可以获得未排序的结果并在服务器端对其进行排序。 spring 数据可能 return 流式传输,因此您可以执行以下操作:
findByColorIn(colors).stream().sorted(comparator....).collect(Collectors.toList());
在我的例子中,我只是手动排序,因为我没有处理很长的项目。
首先你从数据库中检索元素,无论它们出现的顺序是什么,然后与你的颜色列表进行比较并相应地排序。
如果你想同时检索对象和保持 id 的顺序,你可以使用这个:
@Query("select p from Colour p where p.id in :colors order by FIELD(p.id,:colors)")
List<Color> getColorsByIdsOrdered(List<String> colors);
P.S.: 如果 IntelliJ 或其他平台将 ,FIELD'' 标记为红色,请忽略它。应用程序将编译并且请求将正常工作。
有没有什么方法可以使这些函数获得的结果按照提供给函数的列表(或集合)的顺序进行排序?
spring 数据存储库接口函数的简单示例:
public void List<Entity> findByColorIn(List<String> colors)
现在我正在创建顺序为 "green"、"blue"、"cyan" 的字符串列表并调用此函数。
假设所有这三种颜色都有唯一匹配:
如何让函数按给定列表中 属性 的给定顺序返回结果?在这个例子中:
Entity[id=32, color="green"]
Entity[id=11, color="blue"]
Entity[id=22, color="cyan"]
不确定这种情况下的默认顺序是什么,但我假设 id...
spring 数据有两个变体 api 如何使用基于 属性 的标准顺序。
1 个变体:
public void List<Entity> findByColorInOrderByColorDesc(List<String> colors)
public void List<Entity> findByColorInOrderByColorAsc(List<String> colors)
2 个变体
Sort sort= new Sort(Sort.Direction.ASC/DESC,"color");
public void List<Entity> findByColorIn(List<String> colors , Sort sort)
如果您想对案例使用自定义顺序,排序顺序: 颜色="green" , 颜色="blue", 颜色="cyan"
您需要根据您的排序逻辑使用带有自定义排序实现的变体 2。
如果您的结果集较小,您也可以获得未排序的结果并在服务器端对其进行排序。 spring 数据可能 return 流式传输,因此您可以执行以下操作:
findByColorIn(colors).stream().sorted(comparator....).collect(Collectors.toList());
在我的例子中,我只是手动排序,因为我没有处理很长的项目。
首先你从数据库中检索元素,无论它们出现的顺序是什么,然后与你的颜色列表进行比较并相应地排序。
如果你想同时检索对象和保持 id 的顺序,你可以使用这个:
@Query("select p from Colour p where p.id in :colors order by FIELD(p.id,:colors)")
List<Color> getColorsByIdsOrdered(List<String> colors);
P.S.: 如果 IntelliJ 或其他平台将 ,FIELD'' 标记为红色,请忽略它。应用程序将编译并且请求将正常工作。