java - 无法创建具有动态值的条件查询
问题描述
我正在尝试使用动态字段创建条件查询
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
javax.persistence.criteria.CriteriaQuery cq = cb.createQuery();
Root<Abc> abc = cq.from(Abc.class);
List<Selection<?>> selectList = new ArrayList<Selection<?>>();
if(id != null){
selectList.add(cq.select(abc.get("id")));
}
if(summary != null){
selectList.add(cq.select(abc.get("summary")));
}
cq.multiselect(selectList)
上面的代码给出了异常 java.lang.ClassCastException: org.hibernate.query.criteria.internal.CriteriaQueryImpl cannot be cast to javax.persistence.criteria.Selection
这是类型转换问题,但有没有办法在多选中实现动态值
解决方案
您的代码段的第二行似乎导致了您的问题,因此我对其进行了更改并在最后一行添加了一个分号。试试这个:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> cq = cb.createQuery();
Root<Abc> abc = cq.from(Abc.class);
List<Selection<?>> selectList = new ArrayList<Selection<?>>();
if(id != null){
selectList.add(cq.select(abc.get("id")));
}
if(summary != null){
selectList.add(cq.select(abc.get("summary")));
}
cq.multiselect(selectList);
推荐阅读
- javascript - 通过 URL 打开 Accordion - 深度链接(基础 6.4.3)不起作用
- scala - 限制数据帧分区的最大大小
- git - 为什么 git checkout 不删除新文件?
- ios - 如何比较 AnyObject 是
或不? - excel - 为什么 Visual Basic 编辑器将科学记数法转换为以 # 结尾的数字?
- laravel - laravel SAML 获取 NameId 值
- javascript - 您如何使用 Jest 模拟 Firebase Firestore 方法?
- node.js - 在这里使用@ts-ignore 好吗?
- javascript - ionicon 存在于 DOM 中但不可见(宽度为 0px)
- javascript - 动态 Javascript 地图合并