无法将枚举列表传入Hibernate查询?

时间:2016-10-12 01:23:29

标签: java hibernate enums hql

我正在尝试将枚举列表传入我的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 cannot be cast to java.lang.Enum

为什么会出现这种情况的任何想法?我在这里看了这个链接:using enum list as parameter in HQL query作为参考来做我想做的事情,但我一直得到上​​面的错误。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

导致问题的原因是:Arrays.asList(statusSet)

这只是创建一个单元素列表,其中Set为值(即List<Set<ReportRunStatus>>。但setParameterList期待Collection<ReportRunStatus>,因此导致class cast异常,因为在内部它正在获取一个元素(这是一个HashSet<ReportRunStatus>)并试图将它转换为ReportRunStatus

你应该做的是像

query.setParameterList("fieldStatuses", statusSet);

答案 1 :(得分:-1)

试试这个,

 List<String> reportRunStatusList = new ArrayList<String>();
 for(ReportRunStatus reportRunStatus : statusSet){
     reportRunStatusList.add(reportRunStatus.toString);
 }
 query.setParameterList("fieldStatuses", reportRunStatusList);

您只需要明确地将枚举转换为String。