【问题标题】:Unable to create criteria query with dynamic value无法创建具有动态值的条件查询
【发布时间】:2019-08-09 15:16:51
【问题描述】:

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

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

这是类型转换问题,但有什么方法可以在多选中实现动态值

【问题讨论】:

  • 什么错误???
  • 您的意思是abc.get(id)abc.get(summary) 不带引号吗?
  • 应该selectionListselectList
  • 异常不是语法错误。
  • 它早些时候.i 更正了该代码:)

标签: java spring spring-boot jpa


【解决方案1】:

您的 sn-p 的第二行似乎导致了您的问题,因此我对其进行了更改并在最后一行添加了一个分号。 试试这个:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2011-09-21
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多