2011-02-22 41 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);