休眠计数 Restrictions.in 与枚举对象列表
Hibernate count with Restrictions.in with list of Enum objects
我正在使用 Hibernate 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;
}
所以这样做的全部目的是我可以 select(在本例中 - 计数)所有具有 filter.getValue()
中传递的任何 AppointmentStatus
状态的记录是一个List<Enum>
。
但是我得到的不是预期的结果,而是这个异常:
class java.util.ArrayList cannot be cast to class java.lang.Enum
调用 criteria.uniqueResult()
时发生。
我做错了什么?提前致谢。
我解决了。刚刚将列表转换为数组。
我正在使用 Hibernate 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;
}
所以这样做的全部目的是我可以 select(在本例中 - 计数)所有具有 filter.getValue()
中传递的任何 AppointmentStatus
状态的记录是一个List<Enum>
。
但是我得到的不是预期的结果,而是这个异常:
class java.util.ArrayList cannot be cast to class java.lang.Enum
调用 criteria.uniqueResult()
时发生。
我做错了什么?提前致谢。
我解决了。刚刚将列表转换为数组。