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));