java case or_java – 在CriteriaBuilder中使用子句和’case w...
我想使用CriteriaBuilder構建下面顯示的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)
異常似乎來自外部CriteriaBuilderImpl.equal()調用,它包含selectCase()調用.
內部的equal()調用需要Expression的類型信息. selectCase()調用在創建Expression時,將type設置為null.我們有辦法處理這種情況嗎?讓equ()知道類型的方法,或者對上述查詢采用完全不同的方法?
總結
以上是生活随笔為你收集整理的java case or_java – 在CriteriaBuilder中使用子句和’case w...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java initcause_Java
- 下一篇: java redis 主从 哨兵_Red