java过滤会导致JPQL查询
我正在尝试对数据库中的所有问题进行“筛选”搜索。现在我遇到一个异常,告诉我不能将枚举值与字符串进行比较。是不是因为我在声明枚举类型时没有使用完全限定的包名?如果是这样,这比硬编码包名更好吗
Exception Description: Error compiling the query [SELECT q FROM Question q WHERE q.status = 'APPROVED'], line 1, column 40: invalid enum equal expression, cannot compare enum value of type [app.utility.Status} with a non enum value of type [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();
}
# 1 楼答案
正确的做法是使用查询参数:
您还应该使用Criteria API,而不是通过连接查询部分来动态创建查询,该API的设计就是为了实现这一目标
# 2 楼答案
你能试着改变一下吗
致: