我正在尝试使用动态字段创建条件查询
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无法转换为javax.persistence.criteria.Selection
这是类型转换问题,但是有什么方法可以在多选中实现动态值
答案 0 :(得分:0)
您的代码段的第二行似乎是造成您的问题的原因,因此我对其进行了更改,并在最后一行添加了分号。 尝试以下方法:
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);