我正在使用Hibernate 5.4.18.Final。我有一个有效的@Entity Appointment
,其属性status
是我的自定义类型的Enum,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 && element.getValue() instanceof List ) {
criteria.add( Restrictions.in( element.getProperty(), element.getValue() ) );
}
}
return criteria;
}
因此,这样做的全部目的是我可以选择(并在这种情况下计数)所有AppointmentStatus
传递了任何状态的记录(filter.getValue()
其中一个是)List<Enum>
。但是我没有得到预期的结果,而是得到了这个例外:
class java.util.ArrayList cannot be cast to class java.lang.Enum
发生在criteria.uniqueResult()
被调用时。
我究竟做错了什么?提前致谢。
我解决了 刚刚将List转换为Array。