mysql - 如何在 MySQL 中为 case 语句编写 Criteria Builder

标签 mysql jpa criteria

我有一个复杂的查询,我想使用 JPA Criteria Builder 为其构建查询

select i.* 
from items i
where category = ? 
order by
(price >= ?) desc, 
(case when price >= ? then price end) asc, 
price desc limit 1;

我对 Criteria Builder 不是很熟悉,但有基本的知识。

提前致谢。

最佳答案

遗憾的是,JPA 目前不支持 ORDER BY 子句中的 case 表达式。

如果你看一下 CriteriaQuery.orderBy 的参数, 参数必须是 Order 类型而不是 Expression 类型。

或者,您可以将其作为 native SQL 查询执行,然后通过 @SqlResultSetMapping 将结果映射到实体。

关于mysql - 如何在 MySQL 中为 case 语句编写 Criteria Builder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231904/

相关文章:

java - NamedParameterJdbcTemplate 查询方法返回错误的整数值

php - 使用 Doctrine DBAL 创建 View 和存储过程

java - 无限检查自定义 JSR303 注释

grails - 使用条件,如何在Grails GORM中基于max(column)获取结果列表

spring - 使用条件查询/hibernate 查询选择最大 id 行时出现问题?

collections - Doctrine :如何键入返回实体集合的 setter/getter

php - 从数据库检索时序列化数组中断

mysql - 用于搜索名称和姓氏的最有效的 sql 模式

java - Spring Data Jpa 无需 @Query 即可连接多个表

java - Hibernate完整性约束冲突: NOT NULL check constraint: For onetoOne Mapping using spring boot crud