Невозможно создать запрос критерия с динамическим значением - PullRequest
0 голосов
/ 19 марта 2019

я пытаюсь создать критерий запроса с динамическими полями

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

это проблема приведения типа, но есть ли способ реализовать динамические значения в множественном выборе

1 Ответ

0 голосов
/ 19 марта 2019

Вторая строка вашего фрагмента, кажется, вызывает вашу проблему, поэтому я изменил ее и добавил точку с запятой в последнюю строку. Попробуйте вместо этого:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...