我正在嘗試對數據庫中的所有問題進行「篩選」搜索。現在我得到一個異常告訴我,我不能將枚舉值與字符串進行比較。是否因爲我沒有使用聲明枚舉類型的標準包名稱?如果是這樣,是否比硬編碼包名稱更好?在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