Warm tip: This article is reproduced from serverfault.com, please click

java-使用Restrictions.in和Enum对象列表进行休眠计数

(java - Hibernate count with Restrictions.in with list of Enum objects)

发布于 2020-11-27 17:54:13

我正在使用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()被调用时。

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

Questioner
Pavel Polyakoff
Viewed
0
Pavel Polyakoff 2020-12-01 22:33:45

我解决了 刚刚将List转换为Array。