无法使用动态值创建条件查询

问题描述 投票:-2回答:1

我正在尝试使用动态字段创建条件查询

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

这是类型转换问题,但有没有办法在multiselect中实现动态值

java spring spring-boot jpa
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.