Hibernate HQL casting: 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();
Где в БД тип - Varchar2 (x) с контрольным ограничением, а переменная в сущности определяется с помощью Enum с использованием тега @Enumerated (EnumType.STRING):
public enum ColumnEnum {
X, Y;
}
Ответы
Ответ 1
Если поле определено как перечисление, вы должны передать enum как параметр:
query.setParameter(1, TypeEnum.X);
И пусть Hibernate использует отображение для преобразования параметра в строку (если используется @Enumerated(EnumType.STRING)
) или в int (если используется @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));