spring数据jpa-findallby在orderby输入列表

dgtucam1  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(454)

我在kotlin/java中使用jpa和spring boot。我正试图找到一个正确有效的方法。。。在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进行匹配,我认为这不是正确的解决方案,还有额外的操作。还考虑了更改数据库的想法。

7fhtutme

7fhtutme1#

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

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
}

相关问题