gpt4 book ai didi

java - 无法将枚举列表传递到 Hibernate 查询中?

转载 作者:行者123 更新时间:2023-12-02 03:18:20 25 4
gpt4 key购买 nike

我正在尝试将枚举列表传递到我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com