作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将枚举列表传递到我的 hibernate 查询中。这是我正在尝试做的事情:
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 无法转换为 java.lang.Enum
有什么想法可能会发生这种情况吗?我在这里查看了这个链接:using enum list as parameter in HQL query作为我想做的事情的引用,但我不断收到上述错误。任何帮助,将不胜感激。谢谢!
最佳答案
导致问题的是这个:Arrays.asList(statusSet)
这只是创建一个单元素列表,其中 Set
作为值(即 List<Set<ReportRunStatus>>
。但是 setParameterList
期待 Collection<ReportRunStatus>
,因此它导致类转换异常,因为在内部它正在获取一个元素(即 HashSet<ReportRunStatus>
)并尝试将其转换为ReportRunStatus
.
你应该做的事情是这样的
query.setParameterList("fieldStatuses", statusSet);
关于java - 无法将枚举列表传递到 Hibernate 查询中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989124/
我是一名优秀的程序员,十分优秀!