2012-08-07 12 views
10

sto ottenendo questo problema:Hibernate HQL casting: java.lang.String non può essere lanciato a java.lang.Enum

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

Quando provo questo HQL:

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

Dove in DB il tipo è un Varchar2 (x) con un vincolo di controllo e la variabile nell'entità viene definita con Enum utilizzando il tag @Enumerated (EnumType.STRING):

public enum ColumnEnum { 
    X, Y; 
} 
+2

non dovrebbe essere 'query.setParameter (1, TypeEnum.X);'? – mthmulders

+0

Ho provato anche questo, ma l'errore ricevuto è lo stesso –

risposta

16

Se il campo è definito come un enum, è necessario passare un enum come parametro:

query.setParameter(1, TypeEnum.X); 

E lasciare che Hibernate usa la mappatura per trasformare il parametro in una stringa (se @Enumerated(EnumType.STRING) è utilizzabile) o in una int (se si utilizza @Enumerated(EnumType.ORDINAL)).

+0

Sto usando questo tag @Enumerated (EnumType.STRING), grazie –

3

usando seguente annotazione

@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)); 
Problemi correlati