Я пытаюсь сделать «фильтр» поиска по всем вопросам в моей базе данных. Теперь я получаю исключение, говорящее мне, что я не могу сравнить значения перечисления со строкой. Это потому, что я не использую полное имя пакета, в котором объявлен тип enum? Если так, то лучше ли это, чем жестко задавать название пакета?
Описание исключения: Ошибка компиляции запроса [SELECT q FROM
Вопрос q ГДЕ q.status = 'УТВЕРЖДЕН'], строка 1, столбец 40: неверно
enum равное выражение, не может сравнивать перечислимое значение типа
[app.utility.Status} со значением не перечисления типа
[Java.lang.String].
public List<Question> all(Status status, ViewOption viewOption) {
String jpql = "SELECT q FROM Question q ";
boolean isWhereClauseAdded = false;
if (status != Status.ALL) {
if (!isWhereClauseAdded) {
jpql += "WHERE ";
}
jpql += "q.status = '" + status + "'";
}
if (viewOption != ViewOption.ALL) {
if (!isWhereClauseAdded) {
jpql += "WHERE ";
}
// Check if 'AND' operator is needed.
if (status != Status.ALL) {
jpql += " AND ";
}
switch (viewOption) {
case ONLY_IMAGES:
jpql += "q.image != ''";
break;
case NO_IMAGES:
jpql += "q.image = '' ";
break;
}
}
TypedQuery<Question> query = entityManager.createQuery(jpql,
Question.class);
return query.getResultList();
}