首页 > 解决方案 > Spring 和 Kotlin 查询

问题描述

我怎样才能实现这个查询

select *
from table t
where name like '%Ami%'
order by (name = 'Ami') desc, length(col);

(只是排序部分)

使用springframework排序..

我尝试的是

Sort.by(Sort.Direction.DESC, "name") // But I need to sort by name = 'Ami'
Sort.by(Sort.Direction.DESC, "name" = 'Ami'") // throws an error 
JpaSort.unsafe(Sort.Direction.DESC, "name" = 'Ami'") // throws an error 

标签: spring-bootkotlinspring-data-jpaspring-data

解决方案


看起来文档中有一个与您的问题几乎相同的示例:

https://docs.spring.io/spring-data/jpa/docs/2.4.5/reference/html/#jpa.query-methods.sorting

但是,将 Sort 与 @Query 一起使用可以让您潜入包含 ORDER BY 子句中的函数的未经路径检查的 Order 实例。这是可能的,因为订单附加到给定的查询字符串。默认情况下,Spring Data JPA 拒绝任何包含函数调用的 Order 实例,但您可以使用 JpaSort.unsafe 添加潜在的不安全排序。


推荐阅读