gpt4 book ai didi

java - 从 SQL 查询生成案例表达式 - Criteria Builder、Criteria Query

转载 作者:行者123 更新时间:2023-12-01 14:31:49 28 4
gpt4 key购买 nike

select 
(case
when dob <= '2020-02-03' then 'child'
when dob >= '2020-02-03' then 'adult'
else 'teenage'
end) as AgeGroup,
count(*)
FROM student
GROUP BY AgeGroup
Query Result:-
AgeGroup | Count
child | 2
adult | 5
teenage | 4
我有上面的 SQL 查询,它为我提供了属于定义为 child 、成人、青少年的案例的学生人数。
我曾尝试将上述查询转换为 JPA case 表达式,但它没有给我上述查询给出的预期结果。
查询给我计数和案例,而 JPA 代码没有给我相同的。
final Expression<Object> expression =  criteriaBuilder.selectCase()
.when(criteriaBuilder.lessThanOrEqualTo(root.get("dateOfServiceFrom"),
daysBeforeNow(lowDays)), "child")
.when(criteriaBuilder.greaterThanOrEqualTo(root.get("dateOfServiceFrom"),
daysBeforeNow(highDays)), "adult")
.otherwise("teenage");
final CriteriaQuery<Object[]> selectCase = criteriaQuery.multiselect(criteriaBuilder.count(root))
.groupBy(expression);

我很努力,但没有找到任何运气。
请帮助使用JPA实现上述结果。
任何帮助将不胜感激......谢谢

最佳答案

我得到了上述查询的解决方案并发布了链接以供引用:-
https://www.nuomiphp.com/eplan/en/5760.html

final Expression<Object> expression =  criteriaBuilder.selectCase()
.when(criteriaBuilder.lessThanOrEqualTo(root.get("dateOfServiceFrom"),
daysBeforeNow(lowDays)), "child")
.when(criteriaBuilder.greaterThanOrEqualTo(root.get("dateOfServiceFrom"),
daysBeforeNow(highDays)), "adult")
.otherwise("teenage");
final CriteriaQuery<Object[]> selectCase = criteriaQuery.multiselect(expression, criteriaBuilder.count(root))
.groupBy(criteriaBuilder.literal(1));
如果我们在 select Query 中使用任何表达式并且我们必须使用相同的表达式进行分组,那么我们必须从 select 语句中指定表达式的位置并将其传递给criteriaBuilder.literal({position})。
对于上面的例子,表达式的位置是'1'所以我在criteriaBuilder.literal(1)中传递了'1'。

关于java - 从 SQL 查询生成案例表达式 - Criteria Builder、Criteria Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62683570/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com