Количество переходов в спящий режим с ограничениями.в со списком объектов перечисления

#java #hibernate #count #criteria

#java #впасть в спящий режим #количество #критерии

Вопрос:

Я использую гибернацию 5.4.18.Final. У меня есть действительный @Entity Appointment , который имеет свойство status , представляющее собой перечисление моего пользовательского типа AppointmentStatus , которое сопоставляется с использованием @Enumerated( EnumType.STRING ) . Кроме того, у меня есть DAO, в котором есть метод count() , который подсчитывает строки, задаваемые Criteria следующим образом:

     @Override
    public <T> Long countRows( Class<T> clazz, List<FilterElement> filter ) {
        Criteria criteria = buildCriteria( clazz, filter );
        criteria.setProjection( Projections.rowCount() );
        return (long) criteria.uniqueResult();
    }
 

buildCriteria() метод выглядит следующим образом:

     @Override
    private <T> Criteria buildCriteria( Class<T> clazz, List<FilterElement> filter ) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria( clazz );

        for ( FilterElement element : filter ) {
            
            //taking care of different types of operations
            //...

            //if IN operation is required
            if ( element.getOperation() == FilterElement.FilterOperations.IN amp;amp; element.getValue() instanceof List ) {
                criteria.add( Restrictions.in( element.getProperty(), element.getValue() ) );
            }
        }

        return criteria;
    }
 

Таким образом, вся цель этого состоит в том, чтобы я мог выбрать (и в данном случае — подсчитать) все записи, которые имеют любой из AppointmentStatus переданных статусов, в filter.getValue() котором есть a List<Enum> .
Но вместо ожидаемого результата я получаю это исключение:
class java.util.ArrayList cannot be cast to class java.lang.Enum что происходит при criteria.uniqueResult() вызове.

Что я делаю не так? Заранее спасибо.

Ответ №1:

Я решил это. Просто преобразовал список в массив.