gpt4 book ai didi

java - Spring Data JPA findAllBy ... in ... orderBy 输入列表

转载 作者:行者123 更新时间:2023-11-29 10:04:11 24 4
gpt4 key购买 nike

我在 Kotlin/Java 中将 JPA 与 Spring Boot 结合使用。我正在尝试找到正确且有效的方法来执行 findBy ... In OrderBy 输入。

我得到了想要查找的 Id 列表,并且想要具有相同顺序的有序输出。这就是 JPA 允许您实现的功能:

@Repository
interface PhotoRepository : JpaRepository<Photo, String>{
// Which is the same as this query
@Query("SELECT p FROM Photo p where p.id in :var1")
fun findAllByIdIn(var1: List<String>, pageable: Pageable): List<Photo>
}

如果 JPA 允许你做这样的事情那就太好了:

@Repository
interface PhotoRepository : JpaRepository<Photo, String>{
@Query("SELECT p FROM Photo p where p.id in :var1 order by :var1")
fun findAllByIdInOrderByvar1(var1: List<String>, pageable: Pageable): List<Photo>
}

id 列表的大小在 500-1500 项之间。数据库中有很多记录,选择所有记录的想法是不可行的

设想的解决方案是执行findAllByIdIn,然后将记录与列表中的id进行匹配,我认为这不是正确的解决方案,有额外的操作。还考虑了更改数据库的想法。

最佳答案

一旦你使用findAllByIdIn获取了某个id中的所有项目,为了获得正确的顺序,我使用了以下方法:

private fun getOrderedItemsFromOneListToAnother(photosOrder: List<String>, 
photosFound: List<Photo>): List<Photo>{
val mapStringIdsOrder = photosOrder.mapIndexed { index, s -> s to index}.toMap()

Collections.sort(photosFound, Comparator { o1: Photo, o2: Photo->
Integer.compare(mapStringIdsOrder.getOrDefault(o1.id,photosOrder.size),
mapStringIdsOrder.getOrDefault(o2.id, photosOrder.size))})

return photosOrder
}

关于java - Spring Data JPA findAllBy ... in ... orderBy 输入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52262741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com