当前位置: 首页 > 面试题库 >

HQL IN运算符,枚举数组ClassCastException

罗甫
2023-03-14
问题内容

这是我的简化课程和枚举。

class A
{
    @Enumerated (value = EnumType.STRING)
    AType type;
}

enum AType
{
    X,Y
}

如果我跑

query = FROM A a WHERE a.type = :type
query.setParameter("type", AType.X);

一切都很好,花花公子。

但是,如果我执行以下操作:

AType[] types = new AType[1];
types[0] = AType.X;
query = FROM A a WHERE a.type IN (:types)
query.setParameter("types", types);

我得到:

Lcom.src.AType; cannot be cast to java.lang.Enum

如果我做:

Enum[] types = new Enum[1];
types[0] = AType.X;
query = FROM A a WHERE a.type IN (:types)
query.setParameter("types", types);

我得到:

Ljava.lang.Enum; cannot be cast to java.lang.Enum

有任何想法吗?


问题答案:
query.setParameterList("types", types);
                  ^--

这应该做。



 类似资料:
  • 错误:“运算符==”的重载不明确(操作数类型为“A”和“A”) 注:候选者:运算符==(A,A)内置 注:候选:布尔运算符==(常数A)

  • 问题内容: 我想知道如何重新排序枚举,以便所有山羊都在数组的开头而所有羊都在数组的结尾。现在,它实际上可以解决问题,但是要等到数组大小> 100为止。重新排序的速度也很重要,因此api方法有点太慢了。有什么建议? 问题答案: 由于是Implements ,您可以简单地对数组进行排序然后反转: 您也许还可以做到以下几点: 这与API调用基本上具有相同的作用,只是将数组包装在对象中的开销非常小。您甚至

  • 枚举 在实际问题中, 有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月, 一个班每周有六门课程等等。如果把这些量说明为整型, 字符型或其它类型显然是不妥当的。 为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是, 枚举类型是一种基本数据类型,而不是一种构造类型,

  • Rust 有一个叫做 match 的极为强大的控制流运算符,它允许我们将一个值与一系列的模式相比较并根据相匹配的模式执行相应代码。模式可由字面值、变量、通配符和许多其他内容构成;第十八章会涉及到所有不同种类的模式以及它们的作用。match 的力量来源于模式的表现力以及编译器检查,它确保了所有可能的情况都得到处理。 可以把 match 表达式想象成某种硬币分类器:硬币滑入有着不同大小孔洞的轨道,每一

  • 而且返回的值与给定的值也不匹配。我怎么才能做到?

  • 问题内容: 众所周知,有一个经典的枚举示例(尽管现在使用Java 8标准接口),如下所示: 经过测试: 它提供: 在2和4上执行操作+:6.0 在2和4上 执行操作--2.0 在2和4上执行操作*:8.0 在2和4上执行操作/ 0.5 但是我觉得我们可以用Java 8做得更好,因此我实现了以下内容: 从功能上讲,它是等效的,但是两种实现方式是否仍然相似,或者是否存在一些隐藏的细节使新版本比旧版本更