我正在尝试对数据库中的所有问题进行“筛选”搜索。现在我得到一个异常告诉我,我不能将枚举值与字符串进行比较。是否因为我没有使用声明枚举类型的标准包名称?如果是这样,是否比硬编码包名称更好?在JPQL查询中筛选结果
异常描述:错误编译查询[选择Q FROM 问题q其中q.status = '已批准'],第1行,列40:无效 枚举等于表达,不能比较 类型[的枚举值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();
}
是的,我将它添加到* todo *列表中,以将其重构为使用Criteria API。 – LuckyLuke 2011-12-16 20:19:08