java case or_java – 在CriteriaBuilder中使用子句和’case w...
我想使用CriteriaBuilder構(gòu)建下面顯示的having子句:
select objectid,
sum(case when attr_meta = 'severity' then 1 else 0 end) as severity,
sum(case when attr_meta = 'priority' then 1 else 0 end) as priority
from object d
group by objectid
having sum(case when attr_meta = 'severity' then 1 else 0 end) != 1
or sum(case when attr_meta = 'priority' then 1 else 0 end) != 1;
我嘗試了以下方法:
Predicate p = cb.equal(cb.sum(cb.selectCase()
.when(cb.equal(root.get("name"), 'severity'), 1).otherwise(0)), 1);
p = cb.or(p, cb.equal(cb.sum(cb.selectCase()
.when(cb.equal(root.get("name"), 'priority'), 1).otherwise(0)), 1));
但這給出了以下例外:
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at org.hibernate.ejb.criteria.ValueHandlerFactory.isNumeric(ValueHandlerFactory.java:70)
at org.hibernate.ejb.criteria.predicate.ComparisonPredicate.(ComparisonPredicate.java:69)
at org.hibernate.ejb.criteria.CriteriaBuilderImpl.equal(CriteriaBuilderImpl.java:392)
異常似乎來(lái)自外部CriteriaBuilderImpl.equal()調(diào)用,它包含selectCase()調(diào)用.
內(nèi)部的equal()調(diào)用需要Expression的類(lèi)型信息. selectCase()調(diào)用在創(chuàng)建Expression時(shí),將type設(shè)置為null.我們有辦法處理這種情況嗎?讓equ()知道類(lèi)型的方法,或者對(duì)上述查詢采用完全不同的方法?
總結(jié)
以上是生活随笔為你收集整理的java case or_java – 在CriteriaBuilder中使用子句和’case w...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java initcause_Java
- 下一篇: java 并发统计_java并发编程|C