Hibernate HQL casting: java.lang.String 不能 cast to java.lang.Enum

2022-09-04 07:26:10

我遇到了这个问题:

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) 使用 Enum 定义:

public enum ColumnEnum {
    X, Y;
}

答案 1

如果将字段定义为枚举,则必须将枚举作为参数传递:

query.setParameter(1, TypeEnum.X);

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


答案 2

使用以下注释

@Enumerated (value = EnumType.STRING)

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

推荐