我正在尝试执行如下所示的求和SQL查询:
select group_ID, sum(case when user_type = 'Exec' then 1000
when user_type = 'Office' then 10 else 0 end)
from subscription
group by group_ID;
Run Code Online (Sandbox Code Playgroud)
使用来自Hiberate CriteriaBuilder查询的以下代码段:
criteriaBuilder.sum(
criteriaBuilder.selectCase()
.when(criteriaBuilder.equal(subscriptionJoin.get(Subscription_.userType), "Exec"),1000)
.when(criteriaBuilder.equal(subscriptionJoin.get(Subscription_.userType), "Office"),1)
.otherwise(101))
Run Code Online (Sandbox Code Playgroud)
但是出现以下编译错误:
类型参数'N'的推断类型'java.lang.object'不在其范围内; 应该扩展'java.lang.number'
知道如何使用selectCase支持执行求和吗?
Mik*_*unu 11
总和定义如下:
<N extends Number> Expression<N> sum(Expression<N> x);
Run Code Online (Sandbox Code Playgroud)
因此编译错误的原因是sum方法期望这样的参数是Expression,其类型扩展了Number.它从selectCase中确定类型,最终得到java.lang.Object,这是不可接受的.
问题可以通过给出类型参数(<Number>)来解决:
criteriaBuilder.sum(
criteriaBuilder.<Number>selectCase()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7571 次 |
| 最近记录: |