java - 带有 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()
。
我究竟做错了什么?提前致谢。
解决方案
我解决了。刚刚将列表转换为数组。
推荐阅读
- python - Sharepoint 使用 shareplum 库插入
- javascript - 如何使临时画布瓷砖从中心开始绘制?
- html - XPath 中的“当前”节点是什么?
- javascript - 出现在 iframe 后面的菜单栏
- pyspark - 有没有更简单的方法可以将 100+ PySpark 数据框与不同的列组合在一起(不是合并,而是追加)
- javascript - 如何使用 JavaScript 为表中的行创建重新排序功能
- c# - Azure Cosmos Lease Container 只为整个容器创建一个租约,即使有数千个分区
- node.js - 如何获取已初始化保管库的节点 js 应用程序代码中的秘密?
- python - Flask ValueError:matmul:输入操作数 1 在其核心维度 0 中不匹配
- heroku - Heroku 不下载新的 npm 包