Spring 数据 JPA findAllBy ... in ... orderBy 输入列表
Spring Data JPA findAllBy ... in ... orderBy input list
我在 Kotlin/Java 中使用 Spring 引导的 JPA。我正在尝试找到正确有效的方法来执行 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 个项目之间。数据库中有很多记录,select所有记录的想法不可行
设想的解决方案是做一个findAllByIdIn
,然后将记录与列表中的id进行匹配,我认为这不是正确的解决方案,有额外的操作。换数据库的想法也在考虑中
一旦你获得了某个 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
}
我在 Kotlin/Java 中使用 Spring 引导的 JPA。我正在尝试找到正确有效的方法来执行 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 个项目之间。数据库中有很多记录,select所有记录的想法不可行
设想的解决方案是做一个findAllByIdIn
,然后将记录与列表中的id进行匹配,我认为这不是正确的解决方案,有额外的操作。换数据库的想法也在考虑中
一旦你获得了某个 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
}