2011-02-22 71 views
1

这是我剥离的类和枚举。HQL IN运算符,枚举类ArrayCastException

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 

任何想法?

回答

3
query.setParameterList("types", types); 
        ^-- 

这应该这样做。

+0

对我而言,这是一个明显的疏忽。谢谢! – KyleT 2011-02-22 21:33:33

+1

上述方法的签名是setParameters(Object [] values,Type [] types)(Hibernate 3.5.4)。这似乎不适合。方法setParameterList(String name,Object [] vals)是正确的。 – rwitzel 2014-11-24 09:21:29

3

query.setParameterList(“types”,types);