首页 > 解决方案 > 带有 Enum 对象列表的 Restrictions.in 休眠计数

问题描述

我正在使用休眠 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 && 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()

我究竟做错了什么?提前致谢。

标签: javahibernatecountcriteria

解决方案


我解决了。刚刚将列表转换为数组。


推荐阅读