簡體   English   中英

無法將枚舉列表傳遞到Hibernate查詢中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM