【问题标题】:ORDER BY CASE column in Spring Data JPASpring Data JPA 中的 ORDER BY CASE 列
【发布时间】:2016-07-01 10:05:42
【问题描述】:

我想在 ORDER BY 子句中使用 CASE 表达式。 Spring Data JPA 可以做到这一点吗?

Spring Data JPA 提供 org.springframework.data.domain.Sort.Sort 来处理排序,但它不包含任何处理 ORDER BY CASE 的函数。

我想实现以下 JPA 语句的等效,但使用 Spring Data JPA:

ORDER BY CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount END desc

【问题讨论】:

  • 更多细节和一些代码会很好地帮助你。
  • 我认为当前版本的 spring data jpa 无法处理这种排序功能

标签: java spring spring-data spring-data-jpa jpql


【解决方案1】:

您可以使用JpaSort.unsafe() 按任意 JPA ORDER-BY 表达式进行排序:

String orderBy = "CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount END";
Sort sort = JpaSort.unsafe(Sort.Direction.DESC, orderBy);

【讨论】:

  • 有什么诀窍可以使这项工作发挥作用吗?因为这绝对不适合我,并且文档似乎不支持这支持表达式的任意顺序:"No property CASE WHEN 'something' = null then 1 else 0 end found for type MyType!"
  • 对我来说,它使用 Spring Data JPA 2.2.6 和 PostgreSQL 开箱即用,但取决于 RDBMS 或您使用的 Spring Data JPA 版本,当然可能会有一些差异它的工作方式。此外,错误可能是由于使用的表达式不符合您正在使用的数据库的正确语法。
【解决方案2】:

可以 见org/springframework/data/domain/Sort.class

并插入您的代码

yourRepository.findByAnyting(
  new Sort(new Sort.Order(Sort.Direction.DESC, "property"))
);

【讨论】:

  • 只能使用Order By,不能使用Order By Case
  • 例如:ORDER BY CASE WHEN TblList.PinRequestCount 0 THEN TblList.PinRequestCount END desc
猜你喜欢
  • 2019-01-27
  • 2017-09-25
  • 2010-11-20
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2021-07-14
相关资源
最近更新 更多