hibernate count with restrictions.in with枚举对象列表

ftf50wuq  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(284)

我正在使用Hibernate5.4.18.final。我有一个有效的@实体 Appointment 哪个有财产 status 这是我自定义类型的枚举 AppointmentStatus 使用 @Enumerated( EnumType.STRING ) . 我还有一把有方法的刀 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 Criteria buildCriteria( Class clazz, List 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()` 被称为。
我做错什么了?提前谢谢。
iecba09b

iecba09b1#

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

相关问题