#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:
Я решил это. Просто преобразовал список в массив.