2012-08-07 12 views
10

Estoy consiguiendo este problema:Hibernate HQL de calidad: java.lang.String no se puede convertir a java.lang.Enum

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

cuando intento esta HQL:

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

Dónde en DB el tipo es un Varchar2 (x) con una restricción de verificación y la variable en la entidad se define con Enum usando el @Enumerated etiqueta (EnumType.STRING):

public enum ColumnEnum { 
    X, Y; 
} 
+2

¿No debería ser 'query.setParameter (1, TypeEnum.X);'? – mthmulders

+0

He intentado esto también, pero el error recibido es el mismo –

Respuesta

16

Si el campo se define como una enumeración, debe pasar una enumeración como parámetro:

query.setParameter(1, TypeEnum.X); 

Y dejar que Hibernate utiliza el mapeo para transformar el parámetro en una Cadena (si se usa @Enumerated(EnumType.STRING)) o en una int (si se usa @Enumerated(EnumType.ORDINAL)).

+0

Estoy usando esta etiqueta @Enumerated (EnumType.STRING), gracias –

3

utilizando siguiente anotación

@Enumerated (value = EnumType.STRING) 

O

Query q = session.createQuery(from Comment c where c.rating = :rating); 
q.setParameter(rating, 
       Rating.LOW, 
       Hibernate.custom(RatingUserType.class)); 
Cuestiones relacionadas