我想使用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...相关推荐

  1. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  2. Java:判断一个字符串中是否存在另一个字符子串以及判断一个字符串中是否存在指定字符

    Java:判断一个字符串中包含指定字符子串,判断一个字符串中存在指定字符 字符串的contains方法可以判断一个字符串中是否存在另一个字符子串,示例如下 String Str = "Hel ...

  3. Java yield详解_Java 中的 yield 关键字

    从 Java 14 开始,yield 关键字已添加到 Java 语言中,用于实现 switch 表达式. 它用于从 switch 表达式中的 case 返回值. 例如: int x = switch ...

  4. java语言的数组描述_下列关于Java语言的数组描述中,错误的是()。_学小易找答案...

    [单选题]下面()是正确的main()方法说明. [填空题]Java规定,如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的( )和类型以及( )的类型也相同,则父类中的同名成员方法被屏蔽 ...

  5. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  6. java 枚举学习--从小程序中学习

    java 枚举学习--从小程序中学习 Java 枚举类型 解析 简介:java中枚举是一个类 用之前我觉得还是要知道应该何时使用: 一条普遍的规律是,任何使用常量的地方,例如目前使用的switch 代 ...

  7. java程序员编程过程中的基本问题

    问题一:注释器不能找到其中一个类 解决方法: 确保你指定的是类名而不是类的文件名. 如果对CLASSPATH环境变量有进行设置,要重新复位. 如果类在包中,要确保它们处在正确的子目录中. 确保你从.c ...

  8. java多线程 线程安全_Java中的线程安全

    java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...

  9. java设计模式工厂模式_Java中的外观设计模式

    java设计模式工厂模式 Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern ...

最新文章

  1. Nmap源码分析(基本框架)
  2. python 复制文件夹
  3. 【Xamarin开发 Android 系列 12】 创建一个Json读取数据应用-添加定位服务
  4. automaticallyAdjustsScrollViewInsets的作用
  5. mybatis依赖_这大概就是公司一直用Mybatis的原因!真的太强了
  6. Windows via C/C++ 学习(8)CreateProcess 函数
  7. Seata-Server安装_以及工作原理---微服务升级_SpringCloud Alibaba工作笔记0058
  8. 【BZOJ 1052】 1052: [HAOI2007]覆盖问题 (乱搞)
  9. Java SE 和 Java EE 的区别
  10. CISSP-D7-运营安全
  11. PPT文件如何解决不能编辑的问题
  12. 《宣州谢朓楼饯别校书叔云》-(李白明月姑娘之七)
  13. PostgreSQL on Linux 最佳部署手册
  14. 张爱玲 《烬余录》 阅感
  15. 《C++程序设计》第十章总结
  16. JAVA获取字符串首字拼音和全拼
  17. QEMU 模拟启动 openEuler 的树莓派镜像
  18. VUE 创建组件并且引用
  19. 光一个html文件能加图片吗,网站页面设计中光的特效设计
  20. python写篮球游戏_程序员们把“蔡徐坤打篮球”写成了一个游戏

热门文章

  1. uniapp兼容H5和小程序订阅消息授权开发封装,使用方便
  2. Swift 教學:如何使用iOS Charts API 製作漂亮的圖表
  3. 视频编解码之理论概述 和即时通信
  4. “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  5. Enterprise Library 4 缓存应用程序块的设计
  6. 锁的算法,隔离级别的问题
  7. 云计算读书笔记(五)
  8. ACM-ICPC历届世界总冠军名单1977-2015
  9. C++编程思想重点笔记(上)
  10. 中国最齐全的主要电子商务网站(B2C)