2012-08-07 37 views
10

Tôi nhận được vấn đề này:Hibernate HQL đúc: java.lang.String không thể được đúc để java.lang.Enum

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

Khi tôi cố gắng này HQL:

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

đâu trong DB loại là một Varchar2 (x) với ràng buộc kiểm tra và biến trong thực thể được xác định bằng Enum bằng cách sử dụng tag @Enumerated (EnumType.STRING):

public enum ColumnEnum { 
    X, Y; 
} 
+2

nên không nó được 'query.setParameter (1, TypeEnum.X);'? – mthmulders

+0

Tôi cũng đã thử điều này, nhưng lỗi đã nhận là giống nhau –

Trả lời

16

Nếu trường được định nghĩa là một enum, bạn phải vượt qua một enum như tham số:

query.setParameter(1, TypeEnum.X); 

Và hãy Hibernate sử dụng bản đồ để chuyển đổi các tham số vào một String (nếu sử dụng @Enumerated(EnumType.STRING)) hoặc vào một int (nếu @Enumerated(EnumType.ORDINAL) được sử dụng).

+0

Tôi đang sử dụng thẻ này @Được đếm (EnumType.STRING), cảm ơn bạn –

3

sử dụng chú thích sau

@Enumerated (value = EnumType.STRING) 

HOẶC

Query q = session.createQuery(from Comment c where c.rating = :rating); 
q.setParameter(rating, 
       Rating.LOW, 
       Hibernate.custom(RatingUserType.class)); 
Các vấn đề liên quan