我在使用javax.persistence.criteria.CriteriaBuilder創建查詢時遇到問題。我正在使用EclipseLink 2.1和一個Oracle 10g數據庫。在構建具有多個限制的查詢時,它將只使用第一個限制,而不是兩個限制。Jpa QueryBuilder where子句中的多個表達式不起作用
這裏是我的代碼:
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Assignment> query = cb.createQuery(Assignment.class);
Root<Assignment> assignment = query.from(Assignment.class);
query.where(
cb.equal(assignment.get("request"), request),
cb.isNull(assignment.get("endDate")));
return getEm().createQuery(query).getResultList();
開發生產的查詢是:
SELECT ASSX_ID, END_DATE, BEGIN_DATE, COMMENTS,
ASSX_OER_ASSIGNED_TO_ID, OER_OER_ID_ASSIGNED_BY,
ASSX_RQST_ID
FROM TARTS.ASSIGNMENT_XREF
WHERE (ASSX_RQST_ID = ?)
它看起來不錯,除了where子句。我期待:
SELECT ASSX_ID, END_DATE, BEGIN_DATE, COMMENTS,
ASSX_OER_ASSIGNED_TO_ID, OER_OER_ID_ASSIGNED_BY,
ASSX_RQST_ID FROM TARTS.ASSIGNMENT_XREF
WHERE (ASSX_RQST_ID = ? AND BEGIN_DATE IS NOT NULL)
如果我使用cb.and(arg1,arg2)或不,也沒有關係。難道我做錯了什麼?任何幫助將不勝感激。
你的cb.isNull應該是isNotNull。你是否嘗試添加更多的限制和/或試圖明確定義你的連接? – jelle