[英]Can't pass in List of Enums into Hibernate Query?
我试图将枚举列表传递到我的休眠查询中。 这是我正在尝试做的事情:
public Integer getReportRunsCount(Set<ReportRunStatus> statusSet, Optional<String> userId) {
Query query = sessionFactory.getCurrentSession().createQuery("select count(1) from ReportRun r where r.status in (:fieldStatuses) and r.createdBy = :userId");
query.setParameterList("fieldStatuses", Arrays.asList(statusSet));
query.setString("userId", userId.orElse(null));
return Ints.checkedCast((Long)query.uniqueResult());
}
ReportRunStatus.java:
public enum ReportRunStatus {
STARTED,
QUERYDATA,
PROCESSINGDATA,
COMPLETED,
CANCELLED,
ERROR;
}
我只是试图将这些fieldStatuses
作为参数传递,其中ReportRunStatus
是枚举类。 但是,我不断收到这个错误,说
java.lang.ClassCastException: java.util.HashSet cannot be cast to java.lang.Enum
任何想法为什么会发生这种情况? 我在这里查看了此链接: 使用枚举列表作为HQL查询中的参数作为引用来做我想做的事情,但我一直收到上面的错误。 任何帮助,将不胜感激。 谢谢!
造成此问题的原因是: Arrays.asList(statusSet)
这只是创建一个以Set
为值的单元素列表(即List<Set<ReportRunStatus>>
。但是setParameterList
期望的是Collection<ReportRunStatus>
,因此导致类Collection<ReportRunStatus>
异常,因为在内部它正在获取元素out(这是HashSet<ReportRunStatus>
),然后尝试将其ReportRunStatus
转换为ReportRunStatus
。
你应该做的是
query.setParameterList("fieldStatuses", statusSet);
尝试这个,
List<String> reportRunStatusList = new ArrayList<String>();
for(ReportRunStatus reportRunStatus : statusSet){
reportRunStatusList.add(reportRunStatus.toString);
}
query.setParameterList("fieldStatuses", reportRunStatusList);
您只需要将枚举显式转换为String。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.