2012-08-07 98 views
10

我得到这个问题:Hibernate的HQL铸造:java.lang.String中不能转换到java.lang.Enum中

java.lang.String cannot be cast to java.lang.Enum 

当我尝试这个HQL

... 
query = em.createQuery("SELECT object from Entity object where object.column = ?"); 
query.setParameter(1, "X"); 
return query.getResultList(); 

在哪里在DB 类型是一个Varchar2(x)与检查约束和实体中的变量定义为枚举使用标签@Enumerated(EnumType.STRING):

public enum ColumnEnum { 
    X, Y; 
} 
+2

不是应该'query.setParameter(1,TypeEnum.X);'? – mthmulders 2012-08-07 07:10:19

+0

我也试过这个,但收到的错误是一样的 – 2012-08-07 07:14:40

回答

16

如果该字段定义为一个枚举,你必须通过一个枚举作为参数:

query.setParameter(1, TypeEnum.X); 

,让Hibernate使用映射转换参数转换为字符串(如果使用@Enumerated(EnumType.STRING))或转换为int(如果使用@Enumerated(EnumType.ORDINAL))。使用

+0

我使用这个标签@Enumerated(EnumType.STRING),谢谢 – 2012-08-07 07:13:17

3

以下注释

@Enumerated (value = EnumType.STRING) 

OR

Query q = session.createQuery(from Comment c where c.rating = :rating); 
q.setParameter(rating, 
       Rating.LOW, 
       Hibernate.custom(RatingUserType.class)); 
相关问题